如何实现对象的浅拷贝和深拷贝?
时间: 2024-09-26 15:17:22 浏览: 6
对象的复制分为浅拷贝和深拷贝,主要是针对可变类型的成员变量而言:
1. **浅拷贝**(Shallow Copy):创建新对象,并将原对象的所有属性(引用类型)复制到新对象上。在这种情况下,如果原对象的成员变量是引用类型(如列表、字典或集合),新对象会持有相同的内存地址。也就是说,修改浅拷贝的对象会影响原对象。在Python中,可以使用`copy`模块的`copy()`函数或者序列类型(如list、tuple)的切片操作实现浅拷贝。
```python
import copy
original_list = [1, [2, 3]]
shallow_copy = original_list.copy() # 使用copy模块的copy()
# 或者
shallow_copy = original_list[:] # 列表切片也是浅拷贝
# 修改浅拷贝的内部列表,原对象也会受影响
shallow_copy[1][0] = 4
print(original_list) # 输出: [1, [4, 3]]
```
2. **深拷贝**(Deep Copy):创建新对象,并对所有成员变量(包括引用类型)进行递归复制,使得新对象和原对象拥有独立的数据结构。这意味着修改新对象不会影响原对象。在Python中,可以使用`copy`模块的`deepcopy()`函数实现深拷贝。
```python
import copy
original_list = [1, [2, 3]]
deep_copy = copy.deepcopy(original_list)
# 改变深拷贝的内部列表不影响原对象
deep_copy[1][0] = 5
print(original_list) # 输出: [1, [2, 3]]
```