python列表--浅拷贝与深拷贝的区别-创新互联

首先得说说列表为什么需要拷贝,就是为了解决简单赋值操作,传地址的问题,因为赋值过去的列表,其实指向的是同一个地址,问题说明看代码

创新互联公司是一家集网站建设,巴彦企业网站建设,巴彦品牌网站建设,网站定制,巴彦网站建设报价,网络营销,网络优化,巴彦网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
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, 6, 3]
#同一地址,修改b的列表,a也会同时改变。
为了解决以上问题,list赋值需要采用copy函数
a = [1,2,3]
b = a.copy()
print(id(a))
print(id(b))
b[1] = 6
print(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]=666
print(a)
print(b)
以上代码输出结果为:
2963694903944
2964112968904
********************
2963694903880
2963694903880
[1, 2, 3, [10, 20, 666]]
[1, 2, 3, [10, 20, 666]]

接下来演示一下深拷贝

import copy
a = [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]=666
print(a)
print(b)
#输出结果:
2620494013064
2620883635400
********************
2620494013000
2620495283144
[1, 2, 3, [10, 20, 666]]
[1, 2, 3, [10, 20, 30]]
#这才是我们想要得到的目的

不明白的可以自己实践操作试试

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


名称栏目:python列表--浅拷贝与深拷贝的区别-创新互联
本文链接:http://myzitong.com/article/dcpcps.html