我正在尝试初始化矩阵,但重复同一行

时间:2015-05-25 03:55:53

标签: python-3.x

我正在尝试初始化一系列字符列表的矩阵。

aRow = [ '0', '0','0' ]
aGrid = [ aRow, aRow, aRow ]

看起来像一行重复了三次后,我尝试按如下方式修改行并打印结果:

aGrid[1][0] = '1'
aGrid[2][0] = '2'

print( aGrid )

看起来我第三次获得第三排。

[['2', '0', '0'], ['2', '0', '0'], ['2', '0', '0']]

为什么?

2 个答案:

答案 0 :(得分:2)

在python中,当您指定值时,您实际上正在为这些值分配引用。因此,此语句创建一个值为['0', '0', '0']的列表,并将该值的引用分配给aRow

aRow = [ '0', '0','0' ]

然后这个语句创建一个列表,其中包含对同一列表的三个引用:

aGrid = [ aRow, aRow, aRow ]

在Python中,列表是可变值,因此对基础值的更改将反映在对该值的所有引用中。所以:

aGrid[1][0] = '1'

aGrid[2][0] = '2'

两者都更改了aGrid中所有三个引用引用的基础列表的第一个元素,因此最后一个更改是您将看到的那个。

答案 1 :(得分:1)

因为你是。如果希望内容不同,则需要复制对象。

aGrid = [aRow, aRow[:], aRow[:]]