成都网站建设设计

将想法与焦点和您一起共享

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]]
#这才是我们想要得到的目的

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


网页标题:python列表--浅拷贝与深拷贝的区别
文章转载:http://chengdu.cdxwcx.cn/article/ggcpjg.html