乐闻世界logo
搜索文章和话题

浅拷贝和深拷贝有什么区别?

5 个月前提问
4 个月前修改
浏览次数13

1个答案

1

浅拷贝和深拷贝主要涉及复杂对象(如列表、字典或自定义对象等)在内存中的复制方式。

浅拷贝 (Shallow Copy)

浅拷贝只复制对象的引用,不复制对象本身。换句话说,浅拷贝会创建一个新对象,但该对象会引用原始对象中包含的子对象。如果原始对象中的元素是不可变的(比如数字、字符串),那么这种区别通常不会显现。但如果元素是可变的(比如列表、字典等),则更改新对象中的可变元素会影响原始对象。

示例:

python
import copy original_list = [1, 2, [3, 4]] shallow_copied_list = copy.copy(original_list) shallow_copied_list[2][0] = 300 # 输出:original_list = [1, 2, [300, 4]] # shallow_copied_list = [1, 2, [300, 4]]

在这个例子中,修改 shallow_copied_list 中的嵌套列表同时影响了 original_list

深拷贝 (Deep Copy)

深拷贝不仅复制对象的引用,而且递归复制对象本身以及包含的所有子对象。这意味着原始对象和新对象是完全独立的;修改一个不会影响到另一个。

示例:

python
import copy original_list = [1, 2, [3, 4]] deep_copied_list = copy.deepcopy(original_list) deep_copied_list[2][0] = 300 # 输出:original_list = [1, 2, [3, 4]] # deep_copied_list = [1, 2, [300, 4]]

在此例中,deep_copied_list 中的改变没有影响到 original_list

总结

选择浅拷贝还是深拷贝通常取决于具体需求。如果你只需要复制顶层结构并且不介意底层数据共享,浅拷贝可能更快且占用内存更少。但如果你需要完全独立的复制,那么深拷贝是必须的。使用Python的 copy 模块可以方便地实现这两种拷贝方式。

2024年8月7日 21:41 回复

你的答案