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

Python二维列表赋值异常:修改单个元素致所有子列表同步变更

问题原因及解决方案

嘿,这个坑我刚入门Python的时候也踩过!咱们来一步步拆解为什么会出现这种情况:

为什么修改一个子列表会同步所有子列表?

你用Choises=[[False]*3]*101创建二维列表的时候,其实做了两件事:

  1. 首先创建了一个子列表[False, False, False]
  2. 然后把这个子列表的引用复制了101次,放进外层列表里

也就是说,Choises里的101个元素,全都是指向同一个内存地址的列表对象。你可以在交互环境里验证这一点:

>>> Choises=[[False]*3]*101
>>> id(Choises[0]) == id(Choises[1])
True

所以当你执行Choises[1][1]=True时,本质是修改了那个唯一的子列表的第二个元素,自然所有引用它的位置都会显示这个变化。

正确创建独立二维列表的方法

要让每个子列表都是独立的对象,你可以用列表推导式来创建:

Choises = [[False]*3 for _ in range(101)]

这个写法会循环101次,每次都新建一个[False]*3的子列表,所以每个子列表都有自己独立的内存空间。

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

Choises = []
for _ in range(101):
    Choises.append([False]*3)

现在再测试修改操作:

>>> Choises[1][1] = True
>>> Choises[0]
[False, False, False]
>>> Choises[1]
[False, True, False]

这样就只会修改你指定的子列表啦,你的机器学习程序里的循环应该就能正常工作,不会出现所有值过快变成True的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:32:41