我发现Python中的列表列表有一个奇怪的问题

时间:2017-06-10 00:26:32

标签: python

这是我的代码,我无法弄清楚这两个列表列表之间的区别:

cow = 1
column = 1
size = 3
board1=[[0,0,0],[0,0,0],[0,0,0]]
print board1
board2=[[0] * size] * size
print board2

if board1==board2: print 'same'

board1[cow][column] =1
board2[1][2] =1
print "Board 1 is :", board1
print "Board 2 is :", board2

结果:

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
same
Board 1 is : [[0, 0, 0], [0, 1, 0], [0, 0, 0]]
Board 2 is : [[0, 1, 0], [0, 1, 0], [0, 1, 0]]

1 个答案:

答案 0 :(得分:2)

__setitem__

内部列表生成并指向内存中的位置。

外部列表是通过在列表中放入对内部列表的三个引用来实现的。

对内部列表的更改会更改所有其他内部列表,因为它们指向内存中的相同数据。

要在创建列表

后显示此内容
board2=[[0] * size] * size

如果两个对象在内存中都是相同的对象,则is运算符返回true。