浅拷贝和深拷贝的区别,代码举例
时间: 2024-10-01 08:12:14 浏览: 33
JS赋值、浅拷贝和深拷贝(数组和对象的深浅拷贝)实例详解
浅拷贝和深拷贝是数据结构复制过程中两种不同的策略,它们主要涉及到的对象引用和属性的处理。
**浅拷贝**:是指创建新对象时,只复制了原始对象的所有变量的值,而不是内存地址。如果原对象包含的是复杂的数据结构(如列表、字典、集合等),浅拷贝只是创建了一个新的引用指向同样的内部数据。简单来说,浅拷贝的新对象修改会影响原对象。
例如,在Python中,对列表做浅拷贝:
```python
import copy
original_list = [[1, 2], [3, 4]]
shallow_copy = copy.copy(original_list)
# 改变浅拷贝的一个元素
shallow_copy[0][0] = 5
print(shallow_copy) # 输出 [[5, 2], [3, 4]]
print(original_list) # 输出 [[5, 2], [3, 4]],因为是同一份数据
```
**深拷贝**:则是对整个对象及其所有嵌套对象进行完整复制,包括数据结构和内存地址。这意味着即使原对象和新对象有相同的引用,它们也是独立的实体。
同样在Python中,深拷贝可以使用`copy.deepcopy()`函数:
```python
deep_copy = copy.deepcopy(original_list)
# 现在改变深拷贝不影响原对象
deep_copy[0][0] = 6
print(deep_copy) # 输出 [[6, 2], [3, 4]]
print(original_list) # 输出 [[1, 2], [3, 4]], 因为深拷贝是完全独立的
```
阅读全文