python列表的复制,扯一下浅拷贝与深拷贝的区别
将一个列表的数据复制到另一个列表中。
使用列表[:],可以调用copy模块
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import copy
A = [21,22,23,24,['a','b','c','d'],25,26]
B = A #直接赋值
C = A[:] #浅拷贝
D = copy.copy(A) #浅拷贝
E = copy.deepcopy(A) #深拷贝
#看看深拷贝与浅拷贝的区别
#在A数组的最尾处加一个数
A.append(99)
#在A数组里面的数组最尾处加一个数
A[4].append(66)
print("起始列表A------------>",A)
print("直接把A列表赋值给B---->",B)
print("直接浅拷贝A列表给C---->",C)
print("直接浅拷贝A列表给D---->",D)
print("直接深拷贝A列表给E---->",E)
运行结果如下:
起始列表A------------> [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26, 99]
直接把A列表赋值给B----> [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26, 99]
直接浅拷贝A列表给C----> [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26]
直接浅拷贝A列表给D----> [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26]
直接深拷贝A列表给E----> [21, 22, 23, 24, ['a', 'b', 'c', 'd'], 25, 26]
通过以上的例子我们来分析一下这几种复制列表的不同
1、直接赋值,其实就是默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的B也会做相同的改变
2、浅拷贝,没有拷贝子对象,所以原始数据改变,子对象也会改变
3、深拷贝,包含对象里面的子对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变