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












免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM