有人能给我解释一下python的这种行为吗?
有人能解释这种行为吗?当我运行代码时,它会打印10,然后是20。为什么即使我只更改了bob的值,也要更改类的列表?我不应该用新值更新列表吗有人能给我解释一下python的这种行为吗?,python,Python,有人能解释这种行为吗?当我运行代码时,它会打印10,然后是20。为什么即使我只更改了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
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)
实际产量
预期产量
您的列表包含对对象的引用,而不是副本
类的列表[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
如果要将类的副本添加到列表中,请使用创建实例的深度副本:
>>> import copy
>>> robert = copy.deepcopy(bob)
>>> robert.x
20
>>> bob.x = 30
>>> robert.x
20
>>> robert is bob
False
您的列表包含对对象的引用,而不是副本
类的列表[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
如果要将类的副本添加到列表中,请使用创建实例的深度副本:
>>> import copy
>>> robert = copy.deepcopy(bob)
>>> robert.x
20
>>> bob.x = 30
>>> robert.x
20
>>> robert is bob
False