python列表的复制,扯一下浅拷贝与深拷贝的区别

将一个列表的数据复制到另一个列表中。
使用列表[:],可以调用copy模块

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、深拷贝,包含对象里面的子对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变











猜你喜欢

转载自www.cnblogs.com/pychina/p/10171909.html