You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中列表子列表的append函数工作原理疑问

Python列表子列表append行为解析

问题本质:引用复用而非对象复制

当你执行a = [[]]*4时,Python并没有创建4个独立的空列表,而是生成了一个包含4个相同空列表引用的新列表。也就是说,a[0]、a[1]、a[2]、a[3]指向的是内存中同一个列表对象。

为什么append会影响所有子列表?

执行a[0].append(10)时,你是在对这个唯一的底层列表进行修改——不管通过哪个索引(a[0]到a[3])访问,操作的都是同一个对象。所以当你打印a时,所有位置都会显示这个被修改后的列表。

你可以通过打印每个子列表的内存地址验证这一点:

a = [[]]*4
print(id(a[0]), id(a[1]), id(a[2]), id(a[3]))  # 输出四个相同的内存地址

如何创建独立的子列表?

要生成4个彼此独立的空列表,应该使用列表推导式,它会在每次循环中创建新的空列表对象:

a = [[] for _ in range(4)]
a[0].append(10)
print(a)  # 输出 [[10], [], [], []]

此时再打印每个子列表的id,会发现它们的地址完全不同,说明是独立的对象。

内容的提问来源于stack exchange,提问作者Charles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:55:21