pythonのlistは代入しただけでは変更の巻き添えを食らうからcopyで複製する

公開日:2020-01-05 更新日:2020-10-02

Linux Mac Python

t f B! P L

タイトルだけでは意味がわからないと思うので実際のコードを見てみる

% 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']

About me

ゆかき(♀)

アラサー駆け出しインフラエンジニア
ど文系営業からSEへ転身し日々奮闘している人

一児の母

#AP応用情報 #HTML5Lv1 #第2種電気工事士 #DCP(Data Center Practitioner) #LPIC Lv2 #VCP6.5 #CCNP #Oracle Bronze #HSKLv5 #TOEIC860

Media

こちらのイベントで記事紹介いただいていた、嬉しい。

Line stamp

僭越ながら販売中

Green cat & Orange cat

Amazon