Python直接赋值、浅拷贝与深拷贝的区别及实例解析

一颗松果
一颗松果
发布时间:2026-10-16| 5人浏览过
原创

本文详细解析Python中直接赋值、浅拷贝(copy)和深拷贝(deepcopy)的区别。通过字典和列表的实例,展示直接赋值共享引用、浅拷贝仅复制父对象、深拷贝完全独立复制子对象的行为差异,帮助开发者避免内存引用错误。

直接赋值操作实际上是将变量绑定到同一个对象引用上,即两个变量名指向内存中的同一块地址,形成别名关系。

浅拷贝(copy)仅创建一个新的父对象,但不会递归地复制内部嵌套的子对象。这意味着新对象和原对象在顶层是独立的,但内部引用的子对象依然共享同一内存地址。

深拷贝(deepcopy)通过 copy 模块的 deepcopy 方法实现,它会递归地复制父对象及其所有层级的子对象。最终生成的新对象与原对象在内存中完全独立,互不影响。

1.字典浅拷贝实例

>>>a = {1: [1,2,3]}
>>> b = a.copy()
>>> a, b
({1: [1, 2, 3]}, {1: [1, 2, 3]})
>>> a[1].append(4)
>>> a, b
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})

进行深度拷贝操作前,必须引入 copy 模块:

>>>import copy
>>> c = copy.deepcopy(a)
>>> a, c
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
>>> a[1].append(5)
>>> a, c
({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})

解析

1、b = a: 此为赋值引用操作,变量 a 和 b 指向内存中的同一个对象。

2、b = a.copy(): 执行浅拷贝,此时 a 和 b 是两个独立的父对象,但它们内部包含的子对象仍然指向同一内存地址(即共享引用)。

b = copy.deepcopy(a): 执行深度拷贝,变量 a 和 b 完全独立,父对象及其所有子对象均被重新创建,修改其中一个不会影响另一个。

2.更多实例

以下实例演示了如何使用 copy 模块的 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直接赋值与浅拷贝和深拷贝实例讲解使用的文章就介绍到这了,更多相关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 算法库。