> 文章列表 > 浅拷贝与深拷贝的区别

浅拷贝与深拷贝的区别

浅拷贝与深拷贝的区别

浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是编程中用于复制对象时采用的不同方法,它们的主要区别在于是否复制了对象内部的引用类型元素

1. 浅拷贝 :

创建一个新对象,这个对象拥有原始对象属性值的一份精确拷贝。

如果属性是基本类型,则直接复制基本类型的值。

如果属性是引用类型,则复制的是内存地址,即新对象和原始对象共享相同的引用类型元素。

对新对象的修改可能会影响原始对象。

2. 深拷贝 :

创建一个新对象,并递归地复制原始对象中的所有元素,包括嵌套对象。

新对象与原始对象之间不共享任何可变部分。

对新对象的修改不会影响原始对象。

举例说明:

```pythonimport copyoriginal_list = [1, 2, [3, 4]]# 浅拷贝shallow_copy = copy.copy(original_list)shallow_copy = 99 # 修改浅拷贝中的可变元素print(original_list) # 输出: [1, 2, [99, 4]]```

在上面的例子中,`original_list` 和 `shallow_copy` 是浅拷贝关系,修改 `shallow_copy` 中的嵌套列表会影响 `original_list`。

```pythonimport copyoriginal_list = [1, 2, [3, 4]]# 深拷贝deep_copy = copy.deepcopy(original_list)deep_copy = 99 # 修改深拷贝中的可变元素print(original_list) # 输出: [1, 2, [3, 4]]print(deep_copy) # 输出: [1, 2, [99, 4]]```

而在深拷贝的例子中,`original_list` 保持不变,因为 `deep_copy` 是完全独立的副本。

总结:

浅拷贝只复制对象的一级属性,对于对象内部的引用类型元素,只是复制了引用地址,而不是引用对象本身。

深拷贝递归地复制对象的所有元素,包括嵌套对象,创建了一个完全独立的对象,修改新对象不会影响原始对象。

选择浅拷贝还是深拷贝取决于是否需要对象的完全独立性

其他小伙伴的相似问题: