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

Python二维列表初始化后修改元素整列变更的原因咨询

为什么修改二维列表的单个元素会导致整列变化?

这是Python里新手很容易踩的一个经典坑!咱们来把问题拆解开说清楚:

先看你初始化列表的代码:

dist = [[0]*3]*3

这里的核心问题出在***3的复制逻辑**上:当你用[0]*3生成一个包含三个0的子列表后,再用*3去复制这个子列表时,Python并不会为你创建三个全新的独立列表——它只是把同一个子列表的引用重复了三次。换句话说,dist里的三个子列表其实是同一个对象!

你可以用id()函数直观验证这一点:

dist = [[0]*3]*3
print(id(dist[0]))
print(id(dist[1]))
print(id(dist[2]))
# 输出的三个id会完全相同,证明这三个子列表是同一个东西

所以当你执行dist[1][1] = 1时,你本质上是在修改那个唯一的子列表里的元素,而dist的三个位置都指向这个子列表,自然看起来就像是整列都被修改了。

正确的二维列表初始化方式

要创建真正互相独立的子列表,应该使用列表推导式:

dist = [[0]*3 for _ in range(3)]

这里的for _ in range(3)会循环三次,每次都会生成一个全新的[0]*3子列表,这样三个子列表就是完全独立的对象了。这时再修改dist[1][1] = 1,就只会改变指定位置的元素,结果会是:

[[0,0,0],[0,1,0],[0,0,0]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:35:14