要理解深浅拷贝,首先要了解相同的集合在内存中的划分,比如
A = [1,2,3,4]
B = [1,2,3,4]
虽然他们完全一致,但是list是可变的,Python会默认开辟两块空间.如下图
A = [1,2,3,4] B = [1,2,3,4] A=B B[0]='c' print(A) 最终会输出 ['c', 2, 3, 4] 当B做了修改,A也会变化,因为他们引用的地址相同
为了避免这种情况发生,Python有了深浅拷贝这两种方式,
A = [1,2,3,4] B = [1,2,3,4] A=B[:] B[0]='c' print(A) 最终会输出 ['1', 2, 3, 4]
在将B赋予A时,使用切片,把B的内容复制给A,当B在做修改时不会影响A,因为他在内存中是不同的引用
通过切片的方式,只是将最外层的数据进行的拷贝,把它称为浅拷贝
A = [1,2,3,4,['a','b']] B = [1,2,3,4,['a','b']] A=B[:] B[-1][0]='c' print(A) 结果为: [1, 2, 3, 4, ['c', 'b']]
为了解决这种数据不干净的情况,需要import copy模块(Java中的类),使用它的deepcopy函数,
A = [1,2,3,4,['a','b']] B = [1,2,3,4,['a','b']] A=copy.deepcopy(B) B[-1][0]='c' print(A) 运行结果: [1, 2, 3, 4, ['a', 'b']]
这个就是深拷贝啦