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

Python技术问询:为何嵌套列表元素会被多个子列表共享?

为什么[list()] * 3修改一个元素会影响所有元素?

当你执行a = [list()] * 3时,Python并没有生成3个独立的空列表,而是先创建一个空列表对象,再让新列表的三个元素全部指向这个对象的引用。这意味着a[0]、a[1]、a[2]本质上是同一个列表的不同“别名”,对其中任何一个进行修改,都会直接作用于底层的同一个列表,所以最终所有位置都会显示相同的内容。

验证内存地址

你可以通过id()函数查看每个元素的内存地址,确认它们指向同一个对象:

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

正确的写法

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

a = [list() for _ in range(3)]
a[0].append(1)
print(a)  # 输出: [[1], [], []]

或者直接显式创建三个独立的空列表:

a = [[], [], []]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:02:32