deepcopy和copy区别
时间: 2023-12-11 07:57:36 浏览: 25
在Python中,copy()和deepcopy()都是用来复制对象的方法,但它们之间有一些区别。
1. copy()方法只复制了对象的顶层(第一层)数据,而不会递归地复制其子对象。也就是说,如果原始对象包含嵌套对象(如列表或字典),则这些嵌套对象将与原始对象共享,而不是被复制。而deepcopy()则递归地复制整个对象树,包括嵌套对象。
2. copy()方法返回的是原始对象的浅拷贝,也就是说,新对象和原始对象共享相同的内存地址,如果在其中一个对象中进行更改,则另一个对象也会受到影响。而deepcopy()则返回一个全新的对象,新对象和原始对象互不影响。
下面是一个例子来说明这两个方法的区别:
```python
import copy
# 创建一个包含嵌套列表的对象
original_obj = [[1, 2, 3], [4, 5, 6]]
# 浅拷贝对象
shallow_copy = copy.copy(original_obj)
# 深拷贝对象
deep_copy = copy.deepcopy(original_obj)
# 更改原始对象中的第一个列表
original_obj[0][1] = 'changed'
# 浅拷贝对象受到影响
print(shallow_copy) # [[1, 'changed', 3], [4, 5, 6]]
# 深拷贝对象不受影响
print(deep_copy) # [[1, 2, 3], [4, 5, 6]]
```
可以看到,当我们更改原始对象中的第一个列表时,浅拷贝对象也受到了影响,而深拷贝对象不受影响。