Python中經常遇到列表嵌套拷貝問題,但是對拷貝的list進行元素操作時要注意拷貝的方式,要注意是深拷貝還是淺拷貝!
- shadow拷貝(淺拷貝,也叫影子拷貝)
lst0 = [0,1,[1,2,3]]
lst5 = lst0.copy() //[0,1,[1,2,3]]
lst0 == lst5 //True
lst0[2] [1] = 4 //[0,1,[1,4,3]]
print(lst5) //[0,1,[1,4,3]]
lst5 ==lst0 //True
//可以看出在淺拷貝中一個列表中的嵌套列表的值改變之後,另一個列表會相應的改變!因爲它們嵌套的列表使用的是同一個內存地址
如上圖所示!
- 深拷貝
在編寫深拷貝程序時要用到deepcopy函數,但是需要引入copy模塊!
import copy
lst0 = [0,1,[1,2,3]]
lst5 = lst0.deepcopy() //[0,1,[1,2,3]]
lst0 == lst5 //True
lst0[2] [1] = 4
print(lst5) //[0,1,[1,2,3]]
//可以看出深拷貝和淺拷貝不一樣之處在於對於嵌套的引用部分會獨自分配內存!