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

Python二维列表用*初始化后修改对角线元素出现异常问题

为什么用*初始化二维列表会出现意外结果?

嘿,这个问题我太熟了!很多刚接触Python列表的朋友都会踩这个坑😅

问题根源:列表的引用复制

你写的代码table = [([False]*5)]*5看起来是创建了5个包含5个False的子列表,但实际上这5个子列表都是同一个列表对象的引用。

当你用*运算符复制列表时,对于可变对象(比如列表),它复制的不是对象本身,而是指向该对象的引用。也就是说,[([False]*5)]*5做的事情是:

  • 先创建一个列表[False, False, False, False, False]
  • 然后把这个列表的引用重复5次,放进外层列表里

所以当你执行table[i][i] = 1(或者你预期的True)时,你其实是在修改那个唯一的子列表的元素,所有行都会同步变化——因为它们指向的是同一个东西!

正确的解决方法

要创建真正独立的子列表,你需要确保每次都生成一个新的列表对象,最常用的方式是列表推导式:

# 用列表推导式创建独立的子列表
table = [[False]*5 for _ in range(5)]
for i in range(5):
    table[i][i] = True  # 这里改成True和你的预期输出一致

这样,range(5)的每一次循环都会生成一个新的[False]*5列表,外层列表里的5个元素都是完全独立的对象,修改其中一个子列表的元素不会影响其他子列表。

你也可以用普通循环来实现,效果是一样的:

table = []
for _ in range(5):
    # 每次循环都新建一个子列表
    table.append([False]*5)
for i in range(5):
    table[i][i] = True

验证结果

运行上面的正确代码后,你就能得到预期的输出:

[[True, False, False, False, False],
 [False, True, False, False, False],
 [False, False, True, False, False],
 [False, False, False, True, False],
 [False, False, False, False, True]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:12:04