将实例中的变量添加到list-Python时不起作用
为什么这不符合预期(至少对我来说)?我不明白为什么将实例中的变量添加到list-Python时不起作用,python,class,Python,Class,为什么这不符合预期(至少对我来说)?我不明白为什么 class Fred: def __init__(self): self.a=0 fred=Fred() lista=[] for i in range(5): fred.a=i lista.append(fred) for i in lista: print(str(i.a)) 我得到的是数字4的5倍,而不是从0到4。有什么评论吗? 谢谢现在发生的事情是,每次您在范围(5)中循环i时
class Fred:
def __init__(self):
self.a=0
fred=Fred()
lista=[]
for i in range(5):
fred.a=i
lista.append(fred)
for i in lista:
print(str(i.a))
我得到的是数字4的5倍,而不是从0到4。有什么评论吗?
谢谢现在发生的事情是,每次您在范围(5)中循环i时,对Fred的引用都会被覆盖。如果您将
fred=fred()
移动到该循环中,并每次创建一个新对象,那么您应该会看到预期的结果。所发生的情况是,每次在范围(5)
内的i中循环时,对fred的引用都会被覆盖。如果您将fred=fred()
移动到该循环中并每次创建一个新对象,那么您应该会看到预期的结果。您有一个fred
实例,并不断将该实例添加到列表中,同时更改其a
属性。添加到列表不会复制Fred
对象;它只是向同一对象添加另一个引用。您可以通过在循环的每个迭代中创建一个新的Fred
来获得预期的行为。您有一个Fred
实例,并不断将该实例添加到列表中,同时更改其属性。添加到列表不会复制Fred
对象;它只是向同一对象添加另一个引用。您可以通过在循环的每个迭代中创建一个新的Fred
来获得预期的行为。这是bcozlista
中的所有元素都引用同一个元素,,您看到的数字是4,因为它是对象的最新更新值fred
这是bcozlista
中的所有元素都引用了同一个元素,您看到的数字是4,因为它是对象的最新更新值fred