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

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

本文详细解析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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。