Python 深拷贝与浅拷贝详解:copy.copy 与 copy.deepcopy 的区别

巷口听风
巷口听风
发布时间:2026-10-13 | 4人浏览过
原创

本文详细解析 Python 中 copy.copy 浅拷贝与 copy.deepcopy 深拷贝的核心区别。通过代码示例展示,浅拷贝仅复制父对象而共享子对象引用,修改内部可变对象会影响所有引用;深拷贝则完全独立复制对象及其子对象。掌握两者差异对避免数据意外修改至关重要。

Python 提供了 copy.copy 方法实现浅拷贝,其核心行为是仅复制父对象本身,而不会递归复制对象内部包含的子对象。这意味着浅拷贝后的新对象与原对象在顶层是独立的,但若顶层元素为可变对象(如列表、字典),它们仍共享同一内存引用。
相比之下,copy.deepcopy 方法用于实现深拷贝。它不仅复制父对象,还会递归地复制对象内部包含的所有子对象。因此,深拷贝生成的新对象与原对象在内存中完全独立,修改其中一个对象的任何层级内容都不会影响另一个。
为了直观展示这两种拷贝方式的行为差异,以下提供了一个具体的代码示例。该示例创建了一个包含嵌套列表的原始对象,并通过不同方式生成副本,随后对原始对象进行多层级修改,观察各副本的状态变化。
import copy
a 
= [1, 2, 3, 4, ['a', 'b']]  #原始对象

b 
= a  #赋值,传对象的引用
c = copy.copy(a)  #对象拷贝,浅拷贝
d = copy.deepcopy(a)  #对象拷贝,深拷贝

a.append(
5)  #修改对象a
a[4].append('c')  #修改对象a中的['a', 'b']数组对象

print 'a = ', a
print 'b = ', b
print 'c = ', c
print 'd = ', d

输出结果:
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表