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

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

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

全部下载

专题列表