a = [[0] * 5] * 5
a[0][0] = 1
print a

実行結果
[[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]]

これが納得いきません
普通の2次元配列なら[0][0]の要素だけが1になるはずだし
*で単純にコピーされてるなら全部1になるはずですよね?