python 中想要复制一个对象,有一个copy
模块,这里提供了两个方法(函数)copy()
和deepcopy()
,用于复制现有的对象。那么就将我的理解分享给大家
要使用copy
模块的话,很简单,使用下面那段代码:
import copy
那么接下来介绍下这两个方法(函数):
1.copy()
是浅复制,使用方法是:
result = copy.copy(需要复制的对象)
其中,result是复制结果,那么什么是浅复制呢?先看下面的代码:
array1 = [['a'],['b']] #创建一个二维数组
array2= copy.copy(array1) #复制二维数组array1
print("修改array1前的 array1 =",array1)
print("修改array1前的 array2 = ",array2)
array1[0][0]='c' #重点:这里只是修改了二维数组array1 将二维数组中对b的引用改到对c的引用
print("修改array1后的 array1 =", array1)
print("修改array1后的 array2 = ",array2)
这里放置结果,注意结果里面的c
:
修改array1前的 array1 = [['a'], ['b']]
修改array1前的 array2 = [['a'], ['b']]
修改array1后的 array1 = [['c'], ['b']]
修改array1后的 array2 = [['c'], ['b']]
看到上面提示的重点
,只是修改了array1里面的元素,那么为啥array2里面的也跟着改动了?其实这就是浅复制,浅复制只会把最外面的那一层进行复制,剩下里面更深层次不进行复制,这里理解为array1 = [['a'],['b']]
中,复制最外面的一维数组[[],[]]
,对两个元素a b
的引用也会复制,但是不会复制a b
到新的对象中去;所以这里修改arry1深层次内容的代码array1[0][0]='c'(将二维数组中的b换成c)
,实际上也就修改了array2深层次的内容。
2.deepcopy()
是深度复制,使用方法是:
array1 = [['a'],['b']]
array2= copy.deepcopy(array1)
print("修改array1前的 array1 =",array1)
print("修改array1前的 array2 = ",array2)
array1[0][0]='c'
print("修改array1后的 array1 =", array1)
print("修改array1后的 array2 = ",array2)
理解:就是复制了一个一模一样的对象,他们两个完完全全是个克隆与被克隆的关系,一个被揍了一顿,另一个自然也就毫发无伤了。
注意:欢迎转载,转载时请注明来源