為什麼在 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)和兩個變數引用它們。
因此,
可變物件 - 如果我們有一個可變物件,例如列表、字典、集合等,我們可以使用一些特定的操作來改變它,並且所有引用它的變數都將看到更改。
不可變物件 - 如果我們有一個不可變物件,例如字串、整數、元組等,所有引用它的變數都將始終看到相同的值,但是將該值轉換為新值的運算始終返回一個新物件。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP