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']
好了,最后終於得到的完全復制的結果。