python列表--浅拷贝与深拷贝的区别
发布时间:2020-12-20 11:01:03 所属栏目:Python 来源:网络整理
导读:首先得说说列表为什么需要拷贝,就是为了解决简单赋值操作,传地址的问题,因为赋值过去的列表,其实指向的是同一个地址,问题说明看代码 a = [1,2,3]b = a# list类型,简单赋值操作,是传地址print(id(a))print(id(b))b[1] = 6print(b)print(a)执行结果,输
首先得说说列表为什么需要拷贝,就是为了解决简单赋值操作,传地址的问题,因为赋值过去的列表,其实指向的是同一个地址,问题说明看代码
a = [1,2,3] b = a # list类型,简单赋值操作,是传地址 print(id(a)) print(id(b)) b[1] = 6 print(b) print(a) 执行结果,输出的是: 2460317409864 2460317409864 [1,6,3] [1,3] #同一地址,修改b的列表,a也会同时改变。 为了解决以上问题,list赋值需要采用copy函数a = [1,3] b = a.copy() print(id(a)) print(id(b)) b[1] = 6 print(b) print(a) 但是由于copy只是浅拷贝,其只拷贝一层 深拷贝跟浅拷贝的区别# 出现下列问题的原因是,copy‘函数是个浅拷贝函数,即只拷贝一层内容 # 深拷贝需要使用copy模块 a = [1,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]=666 print(a) print(b) 以上代码输出结果为: 2963694903944 2964112968904 ******************** 2963694903880 2963694903880 [1,666]] [1,666]] 接下来演示一下深拷贝 import copy a = [1,30]] b = copy.deepcopy(a) #这里不一样哦 print(id(a)) print(id(b)) print(‘*‘ * 20) print(id(a[3])) print(id(b[3])) a[3][2]=666 print(a) print(b) #输出结果: 2620494013064 2620883635400 ******************** 2620494013000 2620495283144 [1,30]] #这才是我们想要得到的目的 不明白的可以自己实践操作试试 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |