python中可变对象的浅层拷贝深层拷贝的区别
时间: 2024-10-01 16:10:49 浏览: 31
在 Python 中,当你创建一个对象的副本时,可能会涉及到浅拷贝(shallow copy)和深拷贝(deep copy)。这两个概念主要适用于可变对象,如列表、字典或集合。
**浅拷贝:**
- 浅拷贝是指创建一个新的对象,新对象的引用指向原始对象中的元素,而不是复制这些元素本身。
- 对于复杂的数据结构(如嵌套的列表或字典),浅拷贝只会复制第一层的内容,第二层及更深的结构仍然是共享的。
- 如果原对象的可变对象被修改,那么浅拷贝的对象也会受到影响。
例如,对于一个包含列表的列表:
```python
original_list = [[1, 2], [3, 4]]
shallow_copy = original_list.copy()
# 修改原列表的第一个子列表
original_list[0][0] = 5
print(shallow_copy) # 输出:[[5, 2], [3, 4]],第一个子列表也被改变了
```
**深拷贝:**
- 深拷贝则是创建一个完全独立的新对象,不仅复制了原始对象的第一层数据,而且对所有嵌套对象也进行了递归的复制。
- 使用 `copy.deepcopy()` 函数进行深拷贝,即使原对象的可变对象被修改,深拷贝的对象保持不变。
例如,同样使用 `deepcopy`:
```python
import copy
original_list = [[1, 2], [3, 4]]
deep_copy = copy.deepcopy(original_list)
# 原列表的第一个子列表改变后
original_list[0][0] = 5
print(deep_copy) # 输出:[[1, 2], [3, 4]],深拷贝不受影响
```
阅读全文