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

Python多维列表赋值异常:为何所有子列表对应值均为5?

为什么Python多维列表赋值后所有元素都变成最后一个值?

这个坑我刚学Python的时候也踩过!问题出在你创建多维列表的方式上,咱们一步步拆解来看:

问题根源:*操作符复制的是引用而非新对象

你用的创建语句:

X = [[[None] * 4] * 2] * 6

这里的每一层*操作,对于**可变对象(比如列表)**来说,复制的不是新的列表实例,而是指向原列表的引用。具体来说:

  • 首先[None] * 4创建了一个包含4个None的列表,这步没问题,因为None是不可变对象;
  • 但[[None]*4]*2并没有创建两个独立的长度为4的列表,而是创建了两个指向同一个列表的引用;
  • 最外层的*6同理,是创建了6个指向同一个长度为2的列表的引用。

所以当你在循环里执行X[i][0][0] = i时,你每次修改的都是同一个底层的列表对象。循环到最后i=5时,这个底层列表的[0][0]被改成了5,而所有外层的列表引用指向的都是它,自然所有位置都显示为5。

正确的创建方式:用嵌套列表推导式

要创建真正独立的多维列表,应该用嵌套的列表推导式,每一层都生成新的列表实例:

X = [[[None for _ in range(4)] for _ in range(2)] for _ in range(6)]
for i in range(0, 6):
    X[i][0][0] = i

这样每一层的列表都是全新的,修改其中一个不会影响其他的,运行后就能得到你预期的结果:每个外层列表的X[i][0][0]对应为i。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:54:31