この記事は3年以上前に書かれた記事で内容が古い可能性があります
pythonのlistは代入しただけでは変更の巻き添えを食らうからcopyで複製する
2020-01-05
タイトルだけでは意味がわからないと思うので実際のコードを見てみる
% cat listtest_20190105.py #!/usr/bin/env python # coding: utf-8 list1 = ['aaa','bbb','ccc','ddd','eee'] list2 = list1 list2.remove('ccc') print('list1: %s' % list1) print('list2: %s' % list2)
このコードの実行結果は以下
% python listtest_20190105.py list1: ['aaa', 'bbb', 'ddd', 'eee'] list2: ['aaa', 'bbb', 'ddd', 'eee']
list2 = list1
の時点でlist1とは独立したlist2と言うリストができていると思ったが、
list2を変更(remove)したらlist1も巻き添えを食らって変更されていた
という問題
巻き添えを食らいたくないときはcopyを使えば良い
list2 = copy.copy(list1)
list2を変更しても、list1は影響を受けない
% cat listtest_20190105_2.py #!/usr/bin/env python # coding: utf-8 import copy # ★ここ list1 = ['aaa','bbb','ccc','ddd','eee'] list2 = copy.copy(list1) # ★ここ list2.remove('ccc') print('list1: %s' % list1) print('list2: %s' % list2)
実行結果
% python listtest_20190105_2.py list1: ['aaa', 'bbb', 'ccc', 'ddd', 'eee'] list2: ['aaa', 'bbb', 'ddd', 'eee']