python 复制对象 复制元素

1年前 ⋅ 478 阅读

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)

理解:就是复制了一个一模一样的对象,他们两个完完全全是个克隆与被克隆的关系,一个被揍了一顿,另一个自然也就毫发无伤了。