您的位置:首页 > 编程语言 > Python开发

Python中复制,浅拷贝,深拷贝的区别详解

2018-03-25 16:26 381 查看

一、前言

Python对对象进行拷贝时有三种方式:复制、浅拷贝和深拷贝。三种复制的实现逻辑都各不相同,使用不同的拷贝方式,会产生不同的结果。区别好这三种方式,在编程的时候可以提高效率,降低错误率。

二、复制

复制就是使用“=”。使用“=”的时候,实际上是传递的是对象的引用,当对象发生修改的时候,复制体也会发生同等的改变,无论何种改变。

三、浅拷贝

浅拷贝,字面理解,就是只拷贝浅层的东西。他只会拷贝目标对象,目标的子对象(深层东西)不进行拷贝。
当目标对象进行修改之后,复制体不会发生改变。[/u]
当目标对象的子对象(深层东西)发生修改之后,复制体会发生改变。[/u]
浅拷贝的使用方法: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]]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息