2017-06-10 29 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 

內部列表已被創建並指向內存中的某個位置。

外部列表通過將三個引用添加到列表中的內部列表中。

對內部列表的更改會更改爲所有其他內部列表,因爲它們指向內存中的相同數據。

爲了證明這一點把這個創建列表後

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

的是,如果兩個對象都是在內存中同一個對象運算符返回true。