Nov 2, 2008

リストのリスト(2重リスト)の初期化のなぞ

あれれ?
画像処理をPILで書いているのですが、大量のデータを保存するリストを作ろうとして、意外な現象に出会いました。ゆっくり考えれば当たり前なのかもしれませんが、とりあえずメモです

>>> x = [[1,2,3]]*3
>>> x
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> x[0][1] = 10
>>> x
[[1, 10, 3], [1, 10, 3], [1, 10, 3]]

期待してるのはx[0]の2番目だけが入れ替わる事なのですが、[[...]]*nでコピーされるのは参照だけなんですね。そうか、コピーされると考えれば参照なのが当たり前な気もしてきました。

No comments: