Skip to main content
 首页 » 编程设计

python之有人可以向我解释这种 python 行为吗

2025年05月04日13sxdcgaq8080

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