リストのリスト(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でコピーされるのは参照だけなんですね。そうか、コピーされると考えれば参照なのが当たり前な気もしてきました。

Comments

Popular posts from this blog

Calling OpenCV functions via Cython from Python 3.X.

Showing CPU/Memory usage on tmux status bar(tmuxのステータスバーにCPUとMemoryの使用状況を表示する)

Subclassing and Signal connect on a same widget crashes PySide application on exit.