空の多次元配列を作成するときにハマったことのメモ
#空の2次元配列の作成
スクリプトの中で、空の2次元配列を作りたいなぁと思い、以下のようなコードで作成してみた。
hoge = [[]] * 5
そしたら、なぜか思うような結果が返ってこない。例えば、、
>>> hoge = [[]] * 5
>>> for i in range(5):
hoge[i].append(i)
みたいにして、hogeの中身を確認すると
>>> print hoge
[[0],[1],[2],[3],[4]]
となるかと思いきや、
>>> print hoge
[[0,1,2,3,4],[1,2,3,4],[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4]]
こうなってしまった。つまるところ * で複製されるオブジェクトは = による代入でつくられるオブジェクト同様、元オブジェクトの参照でしかないっぽい。
結局、空の2次元配列をつくるには、
[[] for i in range(5)]
とやるのがベストかなぁ。