1

为什么这不能按预期工作(至少对我而言)?我想不通为什么。

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。有什么意见吗?谢谢

4

2 回答 2

1

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

于 2012-10-28T04:46:14.700 回答
0

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

于 2012-10-28T04:46:53.203 回答