copy.deepcopy()和copy.copy()之间的关系区别

python 专栏收录该内容
13 篇文章 0 订阅

列表的复制分为两种:深度、浅度
一般常用tuple函数将列表转换为元组,因为元组是不可变的,它保留了列表中原有的元素,便于保存原数据。
拷贝时,要先导入import copy这个包

一维列表的深浅拷贝:
在这里插入图片描述
二维列表的深浅拷贝:

浅度拷贝:lis.copy()

lis为列表

lis = [12,39,10,5,11,66]  #一维列表
lis.append(['I','like','python'])  #添加 ['I','like','python']
li = copy.copy(lis)  #浅度拷贝
print(lis)  #输出:[12,39,10,5,11,66,['I','like','python']]   变成一个二维列表
lis[6][2] = 'you'  
lis[1]=00
print(lis)  #[12,0,10,5,11,66,['I','like','you']]
print(li)   #[12,39,10,5,11,66,['I','like','you']]

执行结果:
在这里插入图片描述
图片+文字解说:
在这里插入图片描述
最初的列表(红色),添加的列表(蓝色),添加成功后,变为二维列表(橙色),现以橙色为最初列表lis,进行li=lis.copy( ),但得到的二维列表,部分还是会随着lis改变而改变(改变指的是蓝色里面的元素),当然其它部分是不会随着改变的。简单来说,这就是浅度拷贝。绿色的不用理

深度拷贝:lis.deepcopy()

lis = [12,39,10,5,11,66]  #一维列表
lis.append(['I','like','python'])  #添加 ['I','like','python']
li = copy.copy(lis)  #浅拷贝
li2 = copy.deepcopy()  #深拷贝
print(lis)  #输出:[12,39,10,5,11,66,['I','like','python']]   变成一个二维列表
lis[6][2] = 'you'  
lis[1]=00
print(lis)  #[12,0,10,5,11,66,['I','like','you']]   原列表
print(li)   #[12,39,10,5,11,66,['I','like','you']]   浅拷贝后得到的列表
print(li2)   #[12, 39, 10, 5, 11, 66, ['I', 'like', 'python']]   深度拷贝后得到的列表

在这里插入图片描述
图片+文字说明:
在这里插入图片描述
绿色为最初得到的二维列表,
紫色为改变二维列表中的元素后得到新的二维列表,
红色为浅拷贝后得到的新的二维列表,
橙色为深拷贝后得到的新的二维列表,

总结:

浅拷贝和深拷贝的关系区别:
它们都是拷贝只是不同层次的拷贝而已。

1.对于一维列表,当列表中的元素发生改变,copy和deepcopy都不会随着原列表的元素改变而发生任何改变。
2.对于二维列表,copy只拷贝最外层,当一个列表的二维列表中的元素发生改变,则另外一个列表也会随着发生改变;deepcopy内外层全部拷贝,当一个列表的二维列表中的元素发生改变,另一个列表不发生任何改变。

  • 12
    点赞
  • 1
    评论
  • 25
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值