一、前言
Python对对象进行拷贝时有三种方式:复制、浅拷贝和深拷贝。三种复制的实现逻辑都各不相同,使用不同的拷贝方式,会产生不同的结果。区别好这三种方式,在编程的时候可以提高效率,降低错误率。
二、复制
复制就是使用“=”。使用“=”的时候,实际上是传递的是对象的引用,当对象发生修改的时候,复制体也会发生同等的改变,无论何种改变。
三、浅拷贝
浅拷贝,字面理解,就是只拷贝浅层的东西。他只会拷贝目标对象,目标的子对象(深层东西)不进行拷贝。
当目标对象进行修改之后,复制体不会发生改变。
当目标对象的子对象(深层东西)发生修改之后,复制体会发生改变。
浅拷贝的使用方法:
copy.copy(object)
例如:
import copy a = [1,[2]] print('目标对象原件:',a) b = copy.copy(a) a.append('3') #目标对象进行浅层改变 print('目标对象改变:',a) print('复制体的结果:',b) >>> 目标对象原件: [1, [2]] 目标对象改变: [1, [2], '3'] 复制体的结果: [1, [2]]
import copy a = [1,[2]] print('目标对象原件:',a) b = copy.copy(a) a[1].append('3') #目标对象的子对象进行改变,即深层改变 print('目标对象改变:',a) print('复制体的结果:',b) >>> 目标对象原件: [1, [2]] 目标对象改变: [1, [2, '3']] 复制体的结果: [1, [2, '3']]
四、深拷贝
深拷贝,字面理解,就是深层次的拷贝。不仅拷贝了目标对象,也拷贝了目标对象的子对象。
当无论对目标对象或者目标对象的子对象进行改变,复制体都不会改变!
深拷贝的使用方法:
copy.deepcopy(object)
例如:
import copy a = [1,[2]] print('目标对象原件:',a) b = copy.deepcopy(a) a[1].append('3') #目标对象以及其子对象进行改变,即深层改变+浅层改变 a.append('3') print('目标对象改变:',a) print('复制体的结果:',b) >>> 目标对象原件: [1, [2]] 目标对象改变: [1, [2, '3'], '3'] 复制体的结果: [1, [2]]