gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:39:54 24 4
gpt4 key购买 nike

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

关于python - 有人可以向我解释这种 python 行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24455148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com