Python函数传入生成矩阵变量与直接传矩阵字面量结果不同问题
问题根因
你的猜测完全正确,问题出在createBoard函数的行引用重复问题:
- 你在函数中仅初始化了一次
X列表,后续向matrix中添加元素时,重复追加的都是同一个X的内存引用,最终生成的矩阵里所有行本质上是同一个列表。所以修改任意一行的元素时,所有行都会同步变更,这就是你修改(1,0)位置后,(1,1)位置也变成2的原因。 - 直接传入字面量
[[0,0],[0,0]]时,会创建两个完全独立的子列表作为矩阵行,修改其中一行不会影响另一行,结果符合预期。
修复方案
修改createBoard函数,每次生成矩阵行时都创建新的列表即可,示例代码如下:
def createBoard(DIMX, DIMY): matrix = [] while len(matrix) != DIMY : # 每次循环都新建一行,避免引用复用 X = [] i = 0 while i != DIMX : X.append(0) i+=1 matrix.append(X) return matrix
也可以用更简洁的列表推导式实现:
def createBoard(DIMX, DIMY): return [[0 for _ in range(DIMX)] for _ in range(DIMY)]
内容的提问来源于stack exchange,提问作者Louis G
相关产品推荐
相关产品推荐

