在附加到列表时更改实例中的变量不起作用 - Python

时间:2012-10-28 04:43:45

标签: 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.任何评论? 感谢

2 个答案:

答案 0 :(得分:1)

正在发生的事情是每次循环for i in range(5)时都会覆盖对Fred的引用。如果您在该循环内移动fred=Fred()并每次创建一个新对象,那么您应该看到预期的结果。

答案 1 :(得分:0)

您有一个Fred实例并继续将该实例添加到列表中,在您执行此操作时更改其a属性。添加到列表不会复制Fred对象;它只是添加了对同一对象的另一个引用。您可以通过在循环的每次迭代中创建一个新的Fred来获得预期的行为。