python的深浅拷贝

在Python中,深拷贝(deep copy)和浅拷贝(shallow copy)是用于复制对象的两种方式。

先通俗地解释一下深拷贝和浅拷贝。

想象一下你有一个盒子(原始对象),里面装着几本书(数据)。现在你想要复制这个盒子,得到一个全新的一样的盒子(新对象)。这时候就涉及到了深拷贝和浅拷贝的概念。

浅拷贝就像是将原来的盒子完全复制一份。新盒子里放着跟原来盒子相同的书。但是如果其中有些书是其他人也有的,那么两个盒子里放的其实是同样的书。这意味着,如果你在新盒子中加入或移除书籍,那么原来的盒子也会被影响到。因为他们共享同样的引用关系。

而深拷贝则更彻底。它不仅会复制整个盒子,还会将每本书都重新复制一份放进去。这样两个盒子之间没有任何关联,修改其中一个不会对另一个产生影响。

所以说,浅拷贝只复制了外层对象(引用或指针),而深拷贝则逐层地将所有嵌套对象都进行复制。

所以,浅拷贝会创建一个新的对象,并将原始对象的引用复制到新对象中。这意味着修改新对象可能会影响原始对象。而深拷贝则会创建一个全新的独立对象,并且递归地将原始对象及其所有嵌套对象完整复制到新对象中,因此对新对象的任何修改不会影响原始对象。

使用场景:

  1. 浅拷贝适用于需要复制简单数据类型或者只需一层复制的情况。它可以节省内存并提高性能。
  2. 深拷贝适用于需要独立副本,且涉及嵌套或可变数据结构的情况。它确保在修改副本时不会影响到原始数据。

简单示例:

# 浅拷贝示例
import copy

list1 = [1, 2, [3, 4]]
list2 = list1.copy()  # 或者 list2 = copy.copy(list1)
list2[0] = 5
list2[2].append(6)

print(list1)  # [1, 2, [3, 4, 6]]
print(list2)  # [5, 2, [3, 4, 6]]

# 深拷贝示例
import copy

list1 = [1, 2, [3, 4]]
list2 = copy.deepcopy(list1)
list2[0] = 5
list2[2].append(6)

print(list1)  # [1, 2, [3, 4]]
print(list2)  # [5, 2, [3, 4, 6]]

在浅拷贝示例中,修改了列表 list2 的第一个元素和第三个元素的子列表。这导致原始列表 list1 被影响。

而在深拷贝示例中,即使对副本进行了修改,原始列表保持不变。

你可能感兴趣的:(python,python,开发语言)