簡體   English   中英

Python參考

[英]Python references

有人可以解釋為什么帶有整數的示例會導致x和y的值不同,而列表中的示例會導致x和y成為同一個對象嗎?

x = 42
y = x
x = x + 1
print x # 43
print y # 42

x = [ 1, 2, 3 ]
y = x
x[0] = 4
print x # [4, 2, 3]
print y # [4, 2, 3]
x is y # True

因為整數是不可變的,而列表是可變的。 您可以從語法中看到。 x = x + 1您實際上是為x分配一個新值(它在LHS上是唯一的)。 x[0] = 4 ,你在列表上調用索引運算符並給它一個參數 - 它實際上等於x.__setitem__(0, 4) ,這顯然改變了原始對象,而不是創建一個新對象。

如果你做y = x ,y和x是對同一個對象的引用。 但是整數是不可變的,當你執行x + 1 ,會創建新的整數:

>>> x = 1
>>> id(x)
135720760
>>> x += 1
>>> id(x)
135720748
>>> x -= 1
>>> id(x)
135720760

當你有一個可變對象(例如列表,你自己定義的類)時,只要y被改變就會改變x,因為它們指向一個對象。

那是因為當你在python中有一個列表或一個元組時,你創建了一個對象的引用。 當你說y = x時,你用y引用同一個對象。 所以當你用它編輯xy變化的對象時。

如前所述,您所編寫的代碼將相同的對象分配給不同的名稱,例如別名。 如果要將原始列表的副本分配給新變量(實際對象),請使用此解決方案:

>>> x=[1,2,3]
>>> y=x[:] #this makes a new list
>>> x
[1, 2, 3]
>>> y
[1, 2, 3]
>>> x[0]=4
>>> x
[4, 2, 3]
>>> y
[1, 2, 3]

暫無
暫無

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

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