python列表--浅拷贝与深拷贝的区别
首先得说说列表为什么需要拷贝,就是为了解决简单赋值操作,传地址的问题,因为赋值过去的列表,其实指向的是同一个地址,问题说明看代码
a = [1,2,3]b = a# list类型,简单赋值操作,是传地址print(id(a))print(id(b))b[1] = 6print(b)print(a)执行结果,输出的是:2460317409864 2460317409864[1, 6, 3][1, 6, 3]#同一地址,修改b的列表,a也会同时改变。
为了解决以上问题,list赋值需要采用copy函数
a = [1,2,3]b = a.copy()print(id(a))print(id(b))b[1] = 6print(b)print(a)
但是由于copy只是浅拷贝,其只拷贝一层
深拷贝跟浅拷贝的区别# 出现下列问题的原因是,copy‘函数是个浅拷贝函数,即只拷贝一层内容# 深拷贝需要使用copy模块a = [1,2,3,[10,20,30]]b = a.copy()print(id(a))print(id(b))print('*' * 20)print(id(a[3]))print(id(b[3]))a[3][2]=666print(a)print(b)以上代码输出结果为:29636949039442964112968904********************29636949038802963694903880[1, 2, 3, [10, 20, 666]][1, 2, 3, [10, 20, 666]]
接下来演示一下深拷贝
import copya = [1,2,3,[10,20,30]]b = copy.deepcopy(a) #这里不一样哦print(id(a))print(id(b))print('*' * 20)print(id(a[3]))print(id(b[3]))a[3][2]=666print(a)print(b)#输出结果:26204940130642620883635400********************26204940130002620495283144[1, 2, 3, [10, 20, 666]][1, 2, 3, [10, 20, 30]]#这才是我们想要得到的目的
不明白的可以自己实践操作试试
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。