我正在尝试初始化一系列字符列表的矩阵。
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']]
为什么?
答案 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[:]]