Python實踐二維陣列的寫法注意事項
如果直覺地使用list, 可能會寫成
twoDimArray = [[0]*3]*3
陣列的樣子會是 [[0,0,0],[0,0,0], [0,0,0]]
看起來符合二維陣列的模樣, 但其中隱含一個問題
如果更改其中一個元素
twoDimArray[0][0] = 1
結果陣列內容會變成
[[1,0,0],[1,0,0],[1,0,0]]
如果使用id來看
for row in twoDimArray:
print(id(row))
會發現id都一樣, 每一列所指的都是同一個list!!
這種bug可能會造成之後使用這個array時出現奇怪的錯誤
所以建議寫法應該改成
twoDimArray = []
for rowCount in xrange(3)
twoDimArray.append([0]*3)
再一次檢查id, 可以發現到已經是不同的list object了
Tip: 或者乾脆使用numpy 套件更為妥當
11/1新增:在stackflow上看到的相關討論
Reference:
http://stackoverflow.com/questions/12791501/python-initializing-a-list-of-lists