簡體   English   中英

python中的對象引用列表

[英]List of object references in python

我知道,這個問題已經被問這里的一個形式或另一個 ,但沒有答案的解決,我看到的行為。 我理解對象列表應該只保存對這些對象的引用 我觀察到的似乎是這樣的:

class Foo(object):
    def __init__(self,val):
        self.value=val

a = Foo(2)
b = [a]
print b[0].value

a = Foo(3)
print b[0].value

我希望首先看到2 ,然后是3 ,因為我希望b[0]指向a ,現在是一個新對象。 相反,我看到22 我在這里錯過了什么?

b[0]指向最初使用Foo(2)創建的對象。 當你執行a = Foo(3) ,你創建一個新對象並將其命名為a 你沒有以任何方式改變b

行為是因為你所說的: b擁有對象的引用。 它不會保留對您用於引用該對象的名稱的引用。 所以b[0]中的對象對任何名為a變量一無所知。 a分配新值對b沒有影響。

在Python中,賦值運算符將右側表達式的結果綁定到左側表達式中的名稱。

所以,當你說的時候

a = Foo(2)
b = [a]

你已經創建了一個Foo對象,並指這a 然后使用對Foo對象的引用創建一個列表ba )。 這就是b[0].value打印2

但,

a = Foo(3)

創建一個新的Foo對象並用名稱a引用它。 所以,現在a指的是新的Foo對象而不是舊的對象。 但該列表仍然只引用舊對象。 這就是為什么它仍然打印2。

暫無
暫無

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

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