deepcopy函数和copy函数的区别,并举一个例子
时间: 2023-12-11 21:10:55 浏览: 80
`copy` 和 `deepcopy` 的区别在于拷贝的程度不同。`copy` 只会拷贝对象的顶层引用,而不会拷贝引用对象,也就是说,如果对象中包含了其他对象的引用,那么拷贝出来的新对象和原对象都会指向同一个引用对象。而 `deepcopy` 则会递归地拷贝所有引用对象,因此新对象和原对象之间是完全独立的。
下面是一个例子,假设我们有一个包含列表和字典的嵌套对象:
```python
import copy
old_object = {
'list': [1, 2, 3],
'dict': {
'a': 1,
'b': 2,
'c': 3
}
}
```
现在我们使用 `copy` 和 `deepcopy` 对其进行拷贝:
```python
new_object_copy = copy.copy(old_object)
new_object_deepcopy = copy.deepcopy(old_object)
```
然后我们对拷贝出来的对象进行修改:
```python
new_object_copy['list'].append(4)
new_object_copy['dict']['d'] = 4
new_object_deepcopy['list'].append(4)
new_object_deepcopy['dict']['d'] = 4
```
最后我们来比较一下原对象和拷贝出来的对象的值:
```python
print(old_object)
print(new_object_copy)
print(new_object_deepcopy)
```
输出结果如下:
```
{'list': [1, 2, 3], 'dict': {'a': 1, 'b': 2, 'c': 3}}
{'list': [1, 2, 3, 4], 'dict': {'a': 1, 'b': 2, 'c': 3, 'd': 4}}
{'list': [1, 2, 3, 4], 'dict': {'a': 1, 'b': 2, 'c': 3, 'd': 4}}
```
可以看到,使用 `copy` 拷贝出来的新对象中的列表和字典都是原对象的引用,因此修改新对象中的列表和字典也会影响原对象;而使用 `deepcopy` 拷贝出来的新对象则是完全独立的,修改新对象不会影响原对象。
阅读全文