為什麼在 Python 中更改列表 ‘y’ 也更改了列表 ‘x’?


示例

在這篇文章中,我們將看到,如果你更改一個列表,比如列表 y,列表 x 是否也會發生改變。為此,讓我們首先來看一個包含兩個列表的示例,並嘗試使用 append() 方法和 print 函式:

x = [] y = x print("Value of y = ",y) print("Value of x = ",x) y.append(25) print("\nAfter changing...") print("Value of y = ",y) print("Value of x = ",x)

輸出

('Value of y = ', [])
('Value of x = ', [])

After changing...
('Value of y = ', [25])
('Value of x = ', [25])

上面,我們看到更新列表 y 也改變了列表 x。

我們看到上述結果是因為:

  • 列表是可變的,即你可以更改它們的內容。
  • 變數是引用物件的名稱。

上面,編寫 y = x 不會建立列表的副本。它建立了一個新的變數 y,它引用了與 x 引用的相同的物件。這意味著只有一個物件,即列表,x 和 y 都引用它。

當呼叫 append() 時,可變物件的內容從 [] 變為 [25]。由於兩個變數都引用同一個物件,因此使用任一名稱都可以訪問修改後的值 [25]。

假設我們改為將不可變物件賦值給 x,則 x 和 y 將不再相等。這是因為整數是不可變的:

示例

# ints are immutable x = 5 y = x print("Value of y = ",y) print("Value of x = ",x) # We are creating a new object x = x + 1 print("\nAfter changing...") print("Value of y = ",y) print("Value of x = ",x)

輸出

('Value of y = ', 5)
('Value of x = ', 5)

After changing...
('Value of y = ', 5)
('Value of x = ', 6)

當我們編寫 x = x + 1 時,我們不是透過增加其值來改變整數 5。相反,我們建立了一個新的物件(整數 6)並將其賦值給 x。賦值後,我們有兩個物件(整數 6 和 5)和兩個變數引用它們。

因此,

  • 可變物件 - 如果我們有一個可變物件,例如列表、字典、集合等,我們可以使用一些特定的操作來改變它,並且所有引用它的變數都將看到更改。

  • 不可變物件 - 如果我們有一個不可變物件,例如字串、整數、元組等,所有引用它的變數都將始終看到相同的值,但是將該值轉換為新值的運算始終返回一個新物件。

更新於:2022年9月19日

168 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.