2017-11-09 9 views
0

は、誰かが私に説明できます作っていない結果:この中、なぜこのコード(のpython 2.7)感

k=0 
img = [[0]*4]*5 
for i in xrange(len(img)): 
    for j in xrange(len(img[0])): 
     k+=1 
     img[i][j] = k 
print(img) 

結果:

[[17, 18, 19, 20], 
[17, 18, 19, 20], 
[17, 18, 19, 20], 
[17, 18, 19, 20], 
[17, 18, 19, 20]] 

の代わりに、この:

[[1, 2, 3, 4], 
[5, 6, 7, 8], 
[9, 10, 11, 12], 
[13, 14, 15, 16], 
[17, 18, 19, 20]] 

私は何が欠けているのか分かりません...?

答えて

1

ここはこの行です:img = [[0]*4]*5

は基本的に、あなたは配列への参照を作成するのではなく(二次元の)新しいものを作成しています。それは、なぜ最後の行が最後まで繰り返されるのかという理由で、最後の行が全体にわたって複製されている理由を説明します。

+0

あと少しです。申し訳ありません。 「リファレンスを作成する」ことについて説明できますか? – Ti7mq

+0

問題は編集時ではなく、初期化時に発生します。あなたはあなたが期待しているものを作成するために、 'img = [範囲(4)のiのために0]を使う必要があります。 – jhpratt

関連する問題