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模塊來實現了:

1 import 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 copy
2 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']

好了,最后終於得到的完全復制的結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM