Pythonの参照について
Pythonのリストや辞書では、それらへの「参照」が変数に格納される。
mame = 3 uma = mame mame = 6
とした場合は、mameに代入された値3がumaにコピーされ、その後でmameに別の値6を代入してもumaの値3は変わらない。 mameとumaは異なる値を格納する異なる変数である。しかし、リストや辞書の場合は事情が違ってくる。
mame = [0, 1, 2, 3, 4, 5, 6] uma = mame uma.pop(-1)
こうした場合、uma.pop(-1)でumaの最後の要素を削除するとmameの内容も同じく変わる。 これは、リストや辞書の場合は「リスト・辞書への参照」のみが変数に格納されるからである。mameとumaには同じリストへの異なる参照が格納されていることになる。 もし参照ではなく元のリストに変更を加えずに保存しておきたい場合は、copyモジュールのcopy()とdeepcopy()を使う。
import copy mame = [0, 1, 2, 3, 4, 5, 6] uma = copy.copy(mame) uma.pop(-1)
こうすると、mameとumaはそれぞれ異なるリストを参照するようになり、mameをコピーしたumaに変更を加えてもmameは変更されない。 リストがリストを内包する場合は、deepcopy()でコピーすれば内包されたリストのコピーも作られる。