Python中列表的copy方法

首先感謝,資料由網上的查詢共享並保存下來的,該資料完全是用來學習,希望大家有用。

1.在列表中存在一個名爲copy的方法,就像字面意思一樣copy方法是用於複製列表元素的,示例如下:

1 names = [‘Zhangsan’,’Lisi’,’WangErgou’]2 names2 = names.copy()3 print(names,names2)

當然執行結果也跟想象中是一樣的:

[‘Zhangsan’,’Lisi’,’WangErgou’] [‘Zhangsan’,’Lisi’,’WangErgou’]

如果修改了其中一項元素,會不會影響複製體呢?

1 names = [‘Zhangsan’,’Lisi’,’WangErgou’]2 names2 = names.copy()3 print(names,names2)4 names[1] = “Zhaowu”5 print(names,names2)

結果顯而易見,複製體和本體互不影響,結果如下:

1 [‘Zhangsan’,’Lisi’,’WangErgou’] [‘Zhangsan’,’Lisi’,’WangErgou’]2 [‘Zhangsan’,’Zhaowu’,’WangErgou’] [‘Zhangsan’,’Lisi’,’WangErgou’]

那麼列表嵌套是否也適用呢,測試一下:

1 names = [‘Liuneng’,’Zhaosi’,[’SongXiaofeng’,’LiuDanaodai'],’XieGuangkun’]2 names2 = names.copy()3 print(names,names2)4 names[2][0] = ‘XieDajiao’5 print(names,names2)

額,結果好像有點不同:

1 [‘Liuneng’,’Zhaosi’,[’SongXiaofeng’,’LiuDanaodai'],'XieGuangkun'] [‘Liuneng’,’Zhaosi’,[’SongXiaofeng’,’LiuDanaodai'],’XieGuangkun’]2 [‘Liuneng’,’Zhaosi’,[’XieDajiao’,’LiuDanaodai'],’XieGuangkun’] [‘Liuneng’,’Zhaosi’,[’XieDajiao’,’LiuDanaodai'],’XieGuangkun’]

原來主列表只是存儲了嵌套列表在內存中的地址,而不是所看到的數據,copy的也只是嵌套列表的地址,但兩個地址指向的是內存中同一塊區域,所以在對嵌套列表進行修改時,只是通過了兩個複製地址而修改了真實數據,所以兩個列表的元素都被改掉了。

 

當然,肯定會有完全獨立的複製的需求,此時則需要導入一個copy模塊來實現了:

  copy
2 names = ['zhao','qian',['sun','li'],'zhou']
3 names2 = copy.copy(names)
4 print(names,names2)
5 names[2][0] = 'wu'
6 print(names,names2)

執行之後得到結果:

1 ['zhao','qian',['sun','li'],'zhou’] ['zhao','qian',['sun','li'],'zhou’]2 ['zhao','qian',[‘wu','li'],'zhou’] ['zhao','qian',['wu','li'],'zhou']

-.-# 好吧,copy模塊的copy方法和python列表的內置函數copy是一樣的,想要完全複製則需要深層copy:

1 import copy2 names = ['zhao','qian',['sun','li'],'zhou']3 names2 = copy.deepcopy(names)4 print(names,names2)5 names[2][0] = 'wu'6 print(names,names2)

執行之後得到結果:

1 ['zhao','qian',['sun','li'],'zhou’] ['zhao','qian',['sun','li'],'zhou’]2 ['zhao','qian',[‘sun','li'],'zhou’] ['zhao','qian',['wu','li'],'zhou']

好了,最後終於得到的完全複製的結果。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章