2017-06-10 8 views
0
内のリストのリストについての奇妙な問題

を見つけるには、私のコードですが、私は、リストのこれら二つのリストの違いを把握することはできません。私はここの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]] 
+0

あなたが理解できない特別な違いは何ですか? –

+0

私の答えが満足できるものであれば、それを受け入れられたものとしてマークできますか?乾杯。 – Rosh

答えて

2
board2=[[0] * size] * size 

内側のリストが作成され、メモリ内の位置を指し示します。

外側のリストは、内側のリストへの3つの参照をリストに入れて作成されます。

内部リストを変更すると、メモリ内の同じデータを指すように、他のすべての内部リストに対して変更されます。両方のオブジェクトがメモリ内に同じオブジェクトである場合、これはあなたがリストを作成した後

print(
    board1[0] is board1[1], #False 
    board2[0] is board2[1], #True 
    ) 

ザ・オペレーターでこれを入れて表示するには

はtrueを返します。