Python直接赋值、浅拷贝与深度拷贝详解

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

本文详细解析Python中的直接赋值、浅拷贝与深度拷贝机制。通过字典和列表实例,展示b=a、a.copy()及copy.deepcopy()的行为差异,重点说明子对象引用关系及内存独立性,帮助开发者避免数据修改时的意外副作用。

Python赋值与拷贝机制概述

本文通过具体实例,深入解析Python中直接赋值、浅拷贝与深度拷贝的核心概念与行为差异。

  • 直接赋值:本质上是对象引用的传递,即创建一个别名指向原对象。
  • 浅拷贝(copy):仅复制父对象本身,不递归复制其内部包含的子对象。
  • 深度拷贝(deepcopy):通过copy模块的deepcopy方法,完整复制父对象及其所有层级的子对象。

字典浅拷贝实例分析

接下来通过字典类型的浅拷贝实例进行演示。

具体代码实现如下。


>>>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]})

深度拷贝实现与解析

若需进行深度拷贝,必须引入Python标准库中的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作为父对象是独立的,但它们内部包含的子对象仍然指向同一内存地址(即共享引用)。

3、执行 b = copy.deepcopy(a):此为深度拷贝操作,变量a和b不仅父对象完全独立,其内部所有子对象也被完全复制,两者在内存中完全独立,互不影响。

综合实例与输出结果

以下是更多结合copy模块函数的综合实例。

以下代码演示了如何使用copy模块的copy.copy(浅拷贝)和copy.deepcopy(深度拷贝)函数。

完整的测试代码如下。


#!/usr/bin/python
# -*-coding:utf-8 -*-
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数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《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 算法库。