読者です 読者をやめる 読者になる 読者になる

Pythonでリストの中身が勝手に変わってしまう時は

Python2.7

Pythonのあるリスト(Aとする)に別のリスト(Bとする)をアペンドすると、アペンドしたリスト(B)の変更がアペンド先のリスト(A)の中身に影響を与えることがある←よくわかってないです

>>> listA = ['A']
>>> listB = ['B']

>>> listA.append(listB)
>>> listA
['A',['B']]

>>> listB.append('C')
>>> listB 
['B','C']
>>> listA
['A',['B','C']] ← これ

これを回避するためには、copyモジュールのdeepcopy関数を使うと良いらしい。

>>> import copy

>>> listA = ['A']
>>> listB = ['B']

>>> listA.append(copy.deepcopy(listB)) ← ここで使います
>>> listA
['A',['B']]

>>> listB.append('C')
>>> listB 
['B','C']
>>> listA
['A',['B']] ← listBの変更の影響を受けなくなった