2013-07-24 117 views
0

如果我執行此代碼:瞭解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中原始內容的副本,該怎麼辦?

+2

你可能會喜歡這種閱讀: http://nedbatchelder.com/text/names.html – Yann

回答

4

當你做b = a,你只需創建另一個引用到同一個列表。所以對該列表的任何修改都會影響到ab。這樣做b.remove(2)將影響你擁有的單一列表。

如果你希望得到您預期的結果,您可以創建列表的副本:

b = a[:] 

這樣,您所創建的列表的副本,你可以修改一個不改變其他。

>>> a = [1,2,3] 
>>> b = a[:] 
>>> b.remove(2) 
>>> print a,b 
[1, 2, 3] [1, 3] 
2

ab是同一列表的兩個名字,所以如果你通過一個名稱更改列表,你可以看到通過其他名稱的變化。如果你想他們是不同的列表,讓副本:

b = a[:] 

b = list(a)