Python直接赋值、浅拷贝与深拷贝的区别及实例解析
本文详细解析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直接赋值内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









