有人可以解释这种行为吗?当我运行代码时,它打印10,然后是20.为什么list_of_classes
被更改,即使我只更改了bob的值?我不应该用新值更新列表吗?
class wooo():
def __init__(self,x,y,name):
self.x=x
self.y=y
self.name=name
bob=wooo(10,10,"bob")
joe=wooo(10,10,"joe")
list_of_classes=[bob,joe]
print(list_of_classes[0].x)
bob.x=20
print(list_of_classes[0].x)
10
20
10
10
答案 0 :(得分:7)
您的列表包含对象的引用,而不是副本。
list_of_classes[0]
是对bob
引用的同一对象的引用。您可以创建对同一对象的更多引用,并且通过所有这些引用可以看到属性更改:
>>> class wooo():
... def __init__(self,x,y,name):
... self.x=x
... self.y=y
... self.name=name
...
>>> bob=wooo(10,10,"bob")
>>> guido = bob
>>> guido.x
10
>>> guido.x = 20
>>> bob.x
20
>>> guido is bob
True
如果您想要将类的副本添加到列表中,请使用copy
module创建实例的深层副本:
>>> import copy
>>> robert = copy.deepcopy(bob)
>>> robert.x
20
>>> bob.x = 30
>>> robert.x
20
>>> robert is bob
False