Python中深浅拷贝原理详解:数值、字符串与复杂对象的区别

竹里
竹里
发布时间:2026-10-13| 2人浏览过
原创

本文深入解析Python中的深浅拷贝机制,通过对比数值、字符串及字典等对象在赋值、浅拷贝和深拷贝下的内存地址变化,阐明其底层原理。文章指出不可变对象(如数值、字符串)始终共享同一内存地址,而可变对象的浅拷贝仅复制第一层引用,深拷贝则递归复制所有层级,帮助开发者避免常见的内存引用陷阱。

前言

在C++等语言中,参数传递通常分为值传递和引用传递两种形式,二者区别显著。若对此概念尚不清晰,建议自行补充相关知识。接下来,我们将通过具体的Python代码示例来直观展示这一机制,并在此基础上进行总结分析。代码如下:

# copy module import
import copy

# number and string
a = 12
a1 = a
a2 = copy.copy(a)
a3 = copy.deepcopy(a)
# look addr
print("==========number=======")
print(id(a))
print(id(a1))
print(id(a2))
print(id(a3))

s = '12345'
s1 = s
s2 = copy.copy(s)
s3 = copy.deepcopy(s)
# look addr
print("==========String=======")
print(id(s))
print(id(s1))
print(id(s2))
print(id(s3))

# others
target = {
  'name': 'ckmike',
  'age': 25,
  'boxes':[
    'LV',
    'Prada',
    'KUQI'
  ]
}
target1 = target
target2 = copy.copy(target)
target3 = copy.deepcopy(target)
print("==========dict-1=======")
print(id(target))
print(id(target1))
print(id(target2))
print(id(target3))
print("==========dict-2=======")
print(id(target['boxes']))
print(id(target1['boxes']))
print(id(target2['boxes']))
print(id(target3['boxes']))

输出结果:

==========number======= 10943360 10943360 10943360 10943360 ==========String======= 140567123944648 140567123944648 140567123944648 140567123944648 ==========dict-1======= 140567124625088 140567124625088 140567124625160 140567123938760 ==========dict-2======= 140567099339272 140567099339272 140567099339272 140567099339464

总结:

对于数值和字符串这类不可变对象而言,无论是使用赋值符号还是进行浅拷贝、深拷贝操作,变量最终都指向内存中同一份数据的地址,即它们共享相同的内存引用。而对于非数值、非字符串的可变对象(如字典、列表等),浅拷贝仅会复制对象的第一层结构,内部嵌套的可变对象仍保持引用关系;相比之下,深拷贝则会递归地复制所有层级的数据,生成完全独立的副本。

相关标签:

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

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