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]]
//可以看出深拷贝和浅拷贝不一样之处在于对于嵌套的引用部分会独自分配内存!