Python嵌套列表的浅拷贝与深拷贝

Python嵌套列表的浅拷贝与深拷贝

所谓浅拷贝,是指仅拷贝父对象,而不会拷贝子对象。代码中的a列表属于嵌套列表。

在Python中,嵌套列表(二维列表或更高维度的列表)的拷贝行为可以通过浅拷贝(shallow copy)和深拷贝(deep copy)来区分。这两种拷贝方式在处理包含可变对象的列表时尤为重要。

浅拷贝(Shallow Copy)

浅拷贝会创建一个新的列表对象,但是列表中的元素(如果它们是可变对象,如列表、字典等)仍然是原始对象的引用,即a0的地址和b0的地址是相同的,a1的地址和b1的地址是相同的。这也意味着,如果你修改了浅拷贝中某个可变对象(例如b4)的元素,原始对象(a4)中的相应元素也会被修改。

但是如果直接将原始对象的引用给修改了的话,则不会影响旧的数组。题主运行下下面这一段代码应该就理解了。

python 复制代码
import copy
a = [1,2,3,4,[5,6,7]]
b = copy.copy(a)
print(id(a[0]))
print(id(b[0]))
print(id(a[3]))
print(id(b[3]))

b[4][0] = 9
print(a)
print(b)
print(id(a[4]))
print(id(b[4]))

b[4] = 9
print(id(a[4]))
print(id(b[4]))

运行结果

复制代码
4368151552
4368151552
4368151648
4368151648
[1, 2, 3, 4, [9, 6, 7]]
[1, 2, 3, 4, [9, 6, 7]]
140684883504264
140684883504264
140684883504264
4368151808

参考文献

【1】 https://blog.csdn.net/weixin_45720999/article/details/141391719

相关推荐
默_笙4 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003964 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技4 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读4 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时4 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
C语言小火车4 天前
C/C++ 为什么需要编译器?
开发语言·c++
奇思妙想聪明勤奋的小羊4 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1234 天前
2026年第38周GitHub趋势周报
python·科技·github