Python赋值、浅拷贝与深拷贝的区别是什么?实例详解
Python赋值创建引用,原地修改可变对象会波及所有引用。浅拷贝通过分片、copy()或list()生成新对象,但仅复制顶层,嵌套结构仍共享引用,修改内部可变对象会互相影响。深拷贝则递归复制所有层级,实现完全独立。
1.引用
在Python中,赋值操作经常会产生多个指向同一对象的引用。一旦在原地修改了这个可变对象,就会影响到程序中所有引用该对象的地方。

>>> x = [1, 2, 3] >>> y = [x, 4, 5] >>> z = [x, 6] >>> y [[1, 2, 3], 4, 5] >>> z [[1, 2, 3], 6] # 改变被多次引用的变量x >>> x[0] = 2 >>> y [[2, 2, 3], 4, 5] >>> z [[2, 2, 3], 6]
这就好比其他语言中的指针概念,理解起来并不复杂。通过引用,我们可以在程序范围内自由传递大型对象,而不必在途中进行开销巨大的赋值操作。
2.赋值
赋值与引用不同,它会产生一个全新的对象,原对象修改后不会影响到新对象。那么,赋值具体有哪些方法?
最直接的方法是使用没有起点和终点的分片操作:
>>> A = [1, 2, 3] >>> B = A[:] # B赋值A >>> B [1, 2, 3] # 改变A的值 >>> A[0] = 2 >>> A [2, 2, 3] >>> B [1, 2, 3]
字典、集合或列表也提供了copy方法:
>>> a = [1, 2, 3] >>> b = a.copy() # b赋值a # 改变a的值 >>> a[0] = 2 >>> a [2, 2, 3] >>> b [1, 2, 3]
此外,list()、dict()、set()等内置函数同样可以实现赋值效果:
>>> x = [1, 2] >>> y = list(x) >>> x[1] = 3 >>> x [1, 3] >>> y [1, 2]
不过需要特别注意的是,上述方法仅能做到顶层赋值。一旦出现嵌套结构,它们就无法进行深层复制了。
总结
说到底,引用和赋值虽然写法相似,但行为截然不同。理解并区分这两个概念,能有效避免在程序中产生预期之外的副作用。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。















