2013-07-13 86 views
0
列表

請什麼是在Python這兩個代碼之間的區別:複製蟒蛇

white=[2,4,8,9] 
black = white 

white=[2,4,8,9] 
black = white[:] 

太感謝你了。

+4

嘗試修改白色或黑色後副本,看看其他更改。 –

+0

這篇文章最近已經發布,正是你要找的 - http://nedbatchelder.com/text/names.html –

回答

7

第一個副本參考列表white給變量black

所以要black任何變化也將改變white反之亦然

把它看成是一個別名或暱稱white

第二個將列表white的內容複製到變量black,也許這樣寫得更好

black = list(white) 

在這種情況下有兩個變量blackwhite之間沒有連接,因爲它是white內容被複制,而不是一個參考white本身。

額外考慮到下面的相關評論(感謝喬恩·克萊門茨):你可以閱讀更多有關深拷貝VS這裏Understanding dict.copy() - shallow or deep?

+8

*第二個副本的內容* - >第二個創建內容的淺拷貝。 –

5

淺拷貝您可以使用id()is看到在Python外殼的區別:

>>> white=[2,4,8,9] 
>>> black = white 
>>> id(white) 
41026064 
>>> id(black) 
41026064 
>>> black is white 
True 

black and white指向相同的對象,所以它們不是兩件事,它們是一個。當您進行切片(或淺層)複製時,會創建一個新對象。

>>> white=[2,4,8,9] 
>>> black = white[:] 
>>> id(white) 
41026064 
>>> id(black) 
41025904 
>>> black is white 
False 
+0

使用'id'的+1 – Thomas

0

作爲額外的數據點,Python的3.3添加copy方法作爲可讀替代切片語法。所以white.copy()也創建列表的淺表副本white