Python直接赋值、浅拷贝与深度拷贝详解
本文详细解析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程序设计工作提供有益帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









