Python中引用、浅拷贝与深拷贝的区别详解

Ruby
Ruby
发布时间:2026-10-13 | 3人浏览过
原创

本文详细解析Python中的引用、浅拷贝和深拷贝机制。通过代码示例说明变量指向同一内存区域时的引用行为,对比浅拷贝仅复制父对象而子对象共享的特性,以及深拷贝完全独立新空间的原理。掌握copy.copy与copy.deepcopy的使用场景,避免数据修改时的意外影响。

本文主要解析Python中引用与拷贝的具体实现方式,通过详细的代码示例帮助读者深入理解相关概念,对学习和实际工作具有参考价值。

引用机制

一、引用机制


a = ['a', 'b', 'c']
b = a
print(id(a))
print(id(b))
135300560
135300560

观察代码可知,变量a与b的id值完全一致,这表明a和b同时指向内存中的同一区域。因此,当a发生变化时,b也会随之改变。


a = ['a', 'b', 'c']
b = a
a[1] = 'd'
print(b)
b[2] = 'e'
print(a)

['a', 'd', 'c']
['a', 'd', 'e']

浅拷贝机制

二、浅拷贝机制

浅拷贝仅复制父对象,复制后的变量与原始变量的子对象仍然指向同一个内存对象。

在Python中,浅拷贝可以通过调用copy.copy(obj)或obj.copy()来实现。


import copy
a = ['a', 'b', ['c', 'd', 'e']]
b = copy.copy(a)
a.append('e')
print(b)
a[0] = 'g'
print(b)
a[2].append('f')
print(b)
['a', 'b', ['c', 'd', 'e']]
['a', 'b', ['c', 'd', 'e']]
['a', 'b', ['c', 'd', 'e', 'f']]

为了更直观地理解,可以参考以下示意图:

需要注意的是,只有当a元素的子元素内部发生变化时,b才会受到影响并随之改变。

深拷贝机制

三、深拷贝机制

深拷贝的概念相对直观,它相当于开辟了一个新的内存空间,新指针指向该新空间。无论原对象如何变化,新对象的内容始终保持不变。


import copy
a = ['a', 'b', ['c', 'd', 'e']]
b = copy.deepcopy(a)
a.append('e')
print(b)
a[0] = 'g'
print(b)
a[2].append('f')
print(b)
['a', 'b', ['c', 'd', 'e']]
['a', 'b', ['c', 'd', 'e']]
['a', 'b', ['c', 'd', 'e']]

以上就是本文的全部内容,希望这些解析能对大家的学习有所帮助,也欢迎大家继续支持本站。

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表