有人可以解释这种行为吗?当我运行代码时,它打印 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
请您参考如下方法:
您的列表包含对象的引用,而不是副本。
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
