如果我執行此代碼:瞭解Python的變量賦值
a = [1,2,3]
b = a
b.remove(2)
print(a,b)
我希望看到的是:
[1,2,3] [1,3]
但是,這是我真正得到:
[1,3] [1,3]
爲什麼打電話b.remove(2)
也影響a
? 如果我想更改b
,同時保留a
中原始內容的副本,該怎麼辦?
如果我執行此代碼:瞭解Python的變量賦值
a = [1,2,3]
b = a
b.remove(2)
print(a,b)
我希望看到的是:
[1,2,3] [1,3]
但是,這是我真正得到:
[1,3] [1,3]
爲什麼打電話b.remove(2)
也影響a
? 如果我想更改b
,同時保留a
中原始內容的副本,該怎麼辦?
當你做b = a
,你只需創建另一個引用到同一個列表。所以對該列表的任何修改都會影響到a
和b
。這樣做b.remove(2)
將影響你擁有的單一列表。
如果你希望得到您預期的結果,您可以創建列表的副本:
b = a[:]
這樣,您所創建的列表的副本,你可以修改一個不改變其他。
>>> a = [1,2,3]
>>> b = a[:]
>>> b.remove(2)
>>> print a,b
[1, 2, 3] [1, 3]
a
和b
是同一列表的兩個名字,所以如果你通過一個名稱更改列表,你可以看到通過其他名稱的變化。如果你想他們是不同的列表,讓副本:
b = a[:]
或
b = list(a)
你可能會喜歡這種閱讀: http://nedbatchelder.com/text/names.html – Yann