pythonで多次元配列を初期化するときの罠
休日にpythonでz3と戯れてました。
z3とは全然関係ないのですが、pythonで多次元配列を初期化する場面でこんなコードを書いた。
a = [[]] * 4
そして、値を追加してみる。
for i in range(3): a[0].append(i)
以下のようになると思っていたら、なっていなくて、
print(a) [[0, 1, 2], [], [], []]
こうなっていた。
[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
配列を初期化するとき、4つの要素を空配列の値にしたつもりが、それらは空配列の参照でしかなく、皆同じ空配列を指しているため、全要素に値が追加されてしまった。
初歩的なミスだと思うけど、4時間も無駄にしてしまったので書き留めておく・・・。