Python内存管理详解:深入理解浅拷贝与深拷贝

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

本文深入解析Python中的内存管理机制,重点对比浅拷贝与深拷贝的核心差异。通过代码示例展示对象赋值、浅拷贝及深拷贝在内存地址分配上的不同表现,阐明父对象与内层数据在两种拷贝方式下的独立性关系,帮助开发者避免因引用共享导致的数据意外修改问题。

本文重点探讨Python语言中内存使用的核心机制,具体围绕浅拷贝与深拷贝的概念及实现原理展开详细阐述。

浅拷贝的本质是对对象引用的复制,其操作范围仅限于父对象层级。

深拷贝则是对对象内部所有资源进行完整的独立复制,确保新对象与原对象完全隔离。

>>> a=[1,2,3,'a','b']
>>> b=a
>>> b
[1, 2, 3, 'a', 'b']
>>> a
[1, 2, 3, 'a', 'b']
>>> id(a)
3021737547592
>>> id(b)
3021737547592
>>> a.append('c')
>>> a
[1, 2, 3, 'a', 'b', 'c']
>>> b
[1, 2, 3, 'a', 'b', 'c']
>>> b.append(4)
>>> b
[1, 2, 3, 'a', 'b', 'c', 4]
>>> a
[1, 2, 3, 'a', 'b', 'c', 4]

通过上述操作观察可知:当将变量a直接赋值给变量b后,a与b指向同一内存地址。此时无论修改a还是b,另一个变量的内容都会随之同步变化,两者始终保持状态一致。

>>> import copy
>>> a=[1,2,3,['a','b','c']]
>>> b=a
>>> c=copy.copy(a)
>>> b
[1, 2, 3, ['a', 'b', 'c']]
>>> c
[1, 2, 3, ['a', 'b', 'c']]
>>> id(a)
3021737548104
>>> id(b)
3021737548104
>>> id(c)
3021737494536    #浅拷贝父对象的地址不一样
>>> a.append('d')
>>> a
[1, 2, 3, ['a', 'b', 'c'], 'd']
>>> b
[1, 2, 3, ['a', 'b', 'c'], 'd']
>>> c
[1, 2, 3, ['a', 'b', 'c']] #a和c的地址不一样,因此a变化,c不变化




>>> id(a[0])
1686357680
>>> id(c[0])
1686357680
>>> id(a[3])
3021737547528
>>> id(c[3])   
3021737547528    #整个父对象所占的空间不一样,但相同的内层数据的所占空间一样
>>> a[3].append('d')
>>> a
[1, 2, 3, ['a', 'b', 'c', 'd'], 'd']
>>> c
[1, 2, 3, ['a', 'b', 'c', 'd']]#因为内层数据所占空间一样,所以a变化,c跟着变化

以上演示了浅拷贝的行为特征:此时父对象的内存地址已不同,但内层数据的内存地址依然相同。因此,若操作内层数据,两个对象会一同发生变化;但若仅操作父对象本身,被拷贝的对象内容不会随之改变。

>>> a
[1, 2, 3, ['a', 'b', 'c', 'd'], 'd']
>>> d=copy.deepcopy(a)
>>> d
[1, 2, 3, ['a', 'b', 'c', 'd'], 'd']
>>> id(a)
3021737548104
>>> id(d)
3021737547656  #深拷贝父对象的地址不一样

>>> a.append('e')
>>> a
[1, 2, 3, ['a', 'b', 'c', 'd'], 'd', 'e']
>>> d
[1, 2, 3, ['a', 'b', 'c', 'd'], 'd']#a和d的地址不一样,因此a变化,d不变化
>>> id(a[0])
1686357680
>>> id(d[0])
1686357680
>>> id(a[3])
3021737547528
>>> id(d[3])
3021737493256  #内层数据的地址不一样
>>> a[3].append('x')
>>> a
[1, 2, 3, ['a', 'b', 'c', 'd', 'x'], 'd', 'e']
>>> d
[1, 2, 3, ['a', 'b', 'c', 'd'], 'd']

以上演示了深拷贝的行为特征。

两者的主要区别如下:

浅拷贝与原对象的内层数据共享同一内存地址; 深拷贝则完全独立,与原对象在内存层面没有任何关联。

总结

以上就是本文关于Python内存使用(深浅拷贝)的全部内容,希望能为读者提供清晰的技术参考。感兴趣的朋友可继续浏览本站其他相关专题,如有疏漏欢迎留言指正,感谢支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

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 算法库。