在Python中,拷贝对象可以通过几种方式实现,包括使用内置的复制操作符、copy模块中的函数。
1.使用内置的复制操作符
Python内置了复制操作符[:],用于复制序列(如列表、字符串、元组)。对于其他类型的对象,这个操作符可能不起作用,需要使用其他方法。
list1 = [1, 2, [3, 4]]
list2 = list1[:] # 浅拷贝
list2[0] = 100
list2[2][0] = 100
print('list1:', list1) # list1: [1, 2, [100, 4]]
print('list2:', list2) # list2: [100, 2, [100, 4]]
2. 使用 copy 模块的 copy() 函数
copy
模块提供了一个copy()
函数,可以用来创建对象的浅拷贝。浅拷贝会复制对象本身以及它的引用属性,但如果对象包含其他对象(如列表中的列表),则这些对象的引用不会被复制,仍然指向原来的对象。
import copy
list1 = [1, 2, [3, 4]]
list2 = copy.copy(list1) # 浅拷贝
list2[0] = 100
list2[2][0] = 100
print('list1:', list1) # list1: [1, 2, [100, 4]]
print('list2:', list2) # list2: [100, 2, [100, 4]]
3. 使用 copy 模块的 deepcopy() 函数
deepcopy()
函数创建对象的深拷贝。深拷贝会递归地复制对象以及它包含的所有子对象,因此原始对象和复制对象之间不会有任何引用关系。
import copy
list1 = [1, 2, [3, 4]]
list2 = copy.deepcopy(list1) # 深拷贝
list2[0] = 100
list2[2][0] = 100
print('list1:', list1) # list1: [1, 2, [3, 4]]
print('list2:', list2) # list2: [100, 2, [100, 4]]
总结
- 浅拷贝:会复制对象本身以及它的引用属性,但如果对象包含其他对象(如列表中的列表),则这些对象的引用不会被复制,仍然指向原来的对象。
- 深拷贝:会递归地复制对象以及它包含的所有子对象,因此原始对象和复制对象之间不会有任何引用关系。