python 多层列表深拷贝浅拷贝问题 copy
有用的单层list copy方式
(转载于此篇文章)解决了多层list copy后,操作仍使列表元素改变的问题
一,问题说明及原因分析
简单来说,切片[:], 浅拷贝.copy()等方法,对于这种多层list的第一层(下图中的第1,3元素),是实现了深拷贝,但对于嵌套的list(下图中的第2元素),仍然是浅拷贝。这其实很好理解,内层的list保存的是地址,复制过去的时候是把地址复制过去了。嵌套的list在内存中指向的还是同一个。
示例
原理图
二,解决方法
用deepcopy()方法,则无论多少层,无论怎样的形式,得到的新列表都是和原来无关的,这是最安全最清爽最有效的方法。使用时,要导入copy。
##对old或new的任何操作,都不会使另一个list发生变化
import copy
old = [1, [1, 2, 3], 3]
new = copy.deepcopy(old)