为什么这不能按预期工作(至少对我而言)?我无法理解为什么。
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.任何评论? 感谢
答案 0 :(得分:1)
正在发生的事情是每次循环for i in range(5)
时都会覆盖对Fred的引用。如果您在该循环内移动fred=Fred()
并每次创建一个新对象,那么您应该看到预期的结果。
答案 1 :(得分:0)
您有一个Fred
实例并继续将该实例添加到列表中,在您执行此操作时更改其a
属性。添加到列表不会复制Fred
对象;它只是添加了对同一对象的另一个引用。您可以通过在循环的每次迭代中创建一个新的Fred
来获得预期的行为。