簡體   English   中英

有人可以向我解釋這種python行為嗎?

[英]Can someone explain this python behavior to me?

有人可以解釋這種行為嗎? 當我運行代碼時,它將顯示10,然后是20。即使我僅更改了bob的值,為什么list_of_classes被更改了? 我是否不必用新值更新列表?

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模塊創建實例的深層副本:

>>> import copy
>>> robert = copy.deepcopy(bob)
>>> robert.x
20
>>> bob.x = 30
>>> robert.x
20
>>> robert is bob
False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM