有人能给我解释一下python的这种行为吗?

有人能给我解释一下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

有人能解释这种行为吗?当我运行代码时,它会打印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(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