不用拷贝:
list1=[‘a‘,‘b‘] list2=list1 list1.append(‘c‘) print(‘list1‘) print(list1) print(‘list2‘) print(list2)
结果:
只用单纯的‘=’,没有产生新对象,从始至终用的是一个对象,所以,改变一个所有的都改变
一、浅拷贝:
产生新对象
函数:copy
简单的没有嵌套列表的拷贝
list1=[‘a‘,‘b‘] list2=list1.copy() list1.append(‘c‘) print(‘list1‘) print(list1) print(‘list2‘) print(list2)
结果:
有嵌套的拷贝:
list1=[‘a‘,‘b‘,[1,2,3,4]] list2=list1.copy() list1[2].append(‘100‘) print(‘list1‘) print(list1) print(‘list2‘) print(list2)
结果
结论:对于浅拷贝,拷贝时产生新对象,吧拷贝内容复制进去,但是,如果拷贝内容里有地址,拷贝后也用之前的地址,所以改变嵌套里面的值时,拷贝后的也会改变
二、深拷贝:
函数:deepcopy()
模块:copy
import copy list1=[‘a‘,‘b‘,[1,2,3,4]] list2=copy.deepcopy(list1) list1[2].append(‘100‘) print(‘list1‘) print(list1) print(‘list2‘) print(list2)
结果:
结论:深拷贝后产生对象,即使是引用的地址也重产生一个单独引用
可以看到深拷贝之后两个对象是完全独立的,所以互不干扰
原文:https://www.cnblogs.com/jcb9426986/p/11628592.html