Python浅拷贝和深度拷贝操作

在Python中,有一个名为copy的模块。使用此模块,我们可以执行深层复制和浅层复制。在python中,赋值语句不复制对象。它们在目标和主要对象之间创建绑定。

要使用此模块,我们应该使用-导入它

import copy

方法copy.copy(x)

此方法用于创建对象x的浅表副本。对于浅表复制,将一个对象的引用复制到另一个对象。因此,如果复制的引用上有任何更改,它将更改主对象的内容。

方法copy.deepcopy(x)

此方法用于创建对象x的深层副本。对于深层复制,通过从主对象获取数据来创建单个对象。因此,如果复制的引用上有任何更改,则主要对象将保持不变。

范例程式码

import copy
my_mat = [[11,22,33],[44,55,66],[11,22,33]]
print('Matrix Before Updation: ' + str(my_mat))
new_mat = copy.copy(my_mat) #Make a shallow copy and update on copied object
new_mat[2][0] = 77
new_mat[2][1] = 88
new_mat[2][2] = 99
print('Matrix After Updation: ' + str(my_mat)) #Original Matrix Updated
my_mat = [[11,22,33],[44,55,66],[11,22,33]]
new_mat_deep = copy.deepcopy(new_mat)
print('\nMatrix Before Updation: ' + str(my_mat))
new_mat_deep[2][0] = 77
new_mat_deep[2][1] = 88
new_mat_deep[2][2] = 99
print('Matrix After Updation: ' + str(my_mat)) # Original Matrix unchanged
print('New Matrix: ' + str(new_mat_deep)) # Original Matrix unchanged

输出结果

Matrix Before Updation: [[11, 22, 33], [44, 55, 66], [11, 22, 33]]
Matrix After Updation: [[11, 22, 33], [44, 55, 66], [77, 88, 99]]

Matrix Before Updation: [[11, 22, 33], [44, 55, 66], [11, 22, 33]]
Matrix After Updation: [[11, 22, 33], [44, 55, 66], [11, 22, 33]]
New Matrix: [[11, 22, 33], [44, 55, 66], [77, 88, 99]]