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

Python3二维数组更新异常排查(LeetCode井字棋场景)

问题分析:Python二维数组初始化的常见坑

嘿,这绝对不是Python的bug哦!你遇到的是Python中创建二维列表时一个非常容易踩的坑,很多有经验的开发者也会偶尔栽在这里~

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

你初始化数组的代码是:

arr = [['']*3]*3

这里的问题在于:['']*3确实创建了一个包含3个空字符串的列表,但后面的*3并不是创建3个独立的新列表,而是把这个列表的引用复制了三次。也就是说,arr里的三个元素其实指向的是同一个列表对象。

所以当你修改arr[i][j]的时候,本质上是在修改那个唯一的底层列表,因此所有行的对应位置都会一起变化。比如:

  • 你第一次修改arr[0][0] = 'X',因为三行都指向同一个列表,所以三行的第0列都变成了'X'
  • 第二次修改arr[2][0] = 'O',三行的第0列又一起变成了'O'
  • 后续的每一次修改都会同步到所有行,最终就出现了你看到的全行列一致的结果。

正确的初始化方式

要创建三个独立的行列表,应该使用列表推导式,这样每一行都是全新的列表:

arr = [['' for _ in range(3)] for _ in range(3)]

这个写法会循环3次,每次都生成一个新的['', '', '']列表,所以三行之间完全独立,修改其中一行的元素不会影响其他行。

验证修复结果

用正确的初始化方式后,遍历你的moves列表更新数组:

moves = [[0,0],[2,0],[1,1],[2,1],[2,2]]
arr = [['' for _ in range(3)] for _ in range(3)]
for idx, (x, y) in enumerate(moves):
    arr[x][y] = 'X' if idx % 2 == 0 else 'O'

最终得到的数组会是符合预期的:

[
 ['X', '', ''],
 ['', 'X', ''],
 ['O', 'O', 'X']
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:57:46