列表的复制分为两种:深度、浅度
一般常用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内外层全部拷贝,当一个列表的二维列表中的元素发生改变,另一个列表不发生任何改变。
版权声明:本文为weixin_45527702原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。