python 中copy与deepcopy
时间: 2024-09-19 20:07:11 浏览: 37
在Python中,`copy` 和 `deepcopy` 都是用来复制对象的两个内置函数,但是它们之间存在一些关键区别。
1. **浅拷贝(copy)**:当你使用 `copy.copy()` 或者 `obj1.copy()` 对象进行浅拷贝时,它会创建一个新的对象,新对象的属性值通常是原对象引用的原始位置。如果原对象是一个简单类型(如数字、字符串等),或者是不可变类型(如元组),那么浅拷贝就是真正的副本。但如果原对象是列表或字典,浅拷贝只会复制一层结构,内部的元素仍然是指向原来的。
示例:
```python
original_list = [1, 2, [3, 4]]
shallow_copy = copy.copy(original_list)
shallow_copy[2].append(5) # 修改嵌套列表不影响原list
print(shallow_copy) # 输出:[1, 2, [3, 4, 5]]
print(original_list) # 输出:[1, 2, [3, 4, 5]]
```
2. **深拷贝(deepcopy)**:`copy.deepcopy()` 或者 `import copy; obj1.deepcopy()` 执行的是深度复制,它会递归地复制整个对象结构,包括所有的嵌套结构,每个元素都是独立的对象。这意味着对深拷贝进行修改不会影响到原对象。
示例:
```python
from copy import deepcopy
deep_copy = deepcopy(original_list)
deep_copy[2].append(6) # 修改深拷贝的嵌套列表不影响原list
print(deep_copy) # 输出:[1, 2, [3, 4, 6]]
print(original_list)
阅读全文