2D阵列意外分配错误

时间:2012-01-30 23:21:12

标签: python

我想创建一个2D数组,如下所示:

grid[y][x] 

这样就有y行数和x列数。

下面是我这样做的方式,但是当我尝试将数组的(0,0)分配为包含值'2'时,代码将每个子数组的第一个值分配给'2'。

为什么会这样?我应该如何pythonically实例化2D数组?

n = 4 
x=0 
y=0 
grid = [[None]*n]*n 

print grid 

grid[y][x]='Here' 

print grid

2 个答案:

答案 0 :(得分:2)

当您使用*创建多个引用时,它不会复制数据 所以当你修改第一行

[here,none,none,none] 

你实际上改变了所有的行。

溶液

[[None for i in range(n)] for j in range(n)]

编辑(来自其他帖子)因为只有列表是可变的(可以就地改变)你也可以做

[[None]*n for j in range(n)]. 

然后每一行仍然是唯一的。如果None对象可以在适当的位置更改,则无效。

答案 1 :(得分:0)

grid = [[None]*n for i in range(n)]