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

PyScript中二维数组赋值异常:修改单行却改变所有行

问题分析与解决

问题代码

<py-script>
rows, cols = (3, 3)
board = [[-1]*cols]*rows
print(board)
board[0][2]=2
print(board)
</py-script>

实际输出

[[-1, -1, -1], [-1, -1, -1], [-1, -1, -1]]
[[-1, -1, 2], [-1, -1, 2], [-1, -1, 2]]

预期输出

[[-1, -1, -1], [-1, -1, -1], [-1, -1, -1]]
[[-1, -1, 2], [-1, -1, -1], [-1, -1, -1]]

问题原因

这不是PyScript的特有问题,普通Python环境运行这段代码结果完全一致,你之前的测试可能存在误差。

问题出在board = [[-1]*cols]*rows这行代码:

  • 首先[-1]*cols创建了一个包含3个-1的列表;
  • 然后*rows是把这个列表的引用复制了3次,也就是说board里的3个元素其实是指向同一个列表的指针。

所以当你修改board[0][2]时,本质是修改了那个被共享的列表,所有行的对应位置自然都会跟着变化。

正确写法

要创建独立的子列表,推荐用列表推导式:

rows, cols = (3, 3)
board = [[-1 for _ in range(cols)] for _ in range(rows)]
print(board)
board[0][2] = 2
print(board)

这样每一行都是新创建的独立列表,修改其中一行不会影响其他行。

也可以用循环逐个创建行:

rows, cols = (3, 3)
board = []
for _ in range(rows):
    board.append([-1]*cols)

内容的提问来源于stack exchange,提问作者AIML23_Kumawat Rahul Devendra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:25:29