リストのリスト(2重リスト)の初期化のなぞ
あれれ?
画像処理をPILで書いているのですが、大量のデータを保存するリストを作ろうとして、意外な現象に出会いました。ゆっくり考えれば当たり前なのかもしれませんが、とりあえずメモです
期待してるのはx[0]の2番目だけが入れ替わる事なのですが、[[...]]*nでコピーされるのは参照だけなんですね。そうか、コピーされると考えれば参照なのが当たり前な気もしてきました。
画像処理を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でコピーされるのは参照だけなんですね。そうか、コピーされると考えれば参照なのが当たり前な気もしてきました。
Comments