sagantaf-佐賀んタフ-

なんでも自分の思ったこと、経験したことを書いて生きます。

【Python】リスト・辞書・タプルのコピー

要約

リストや辞書をコピーして別のものとして使いたい場合は、copy()メソッドでコピーする必要がある。タプルはコピーできない。
 

解説

普通にリストを新たな変数に代入しても、以下のように別のリストとしては扱えない。
 
>>> a = [1,2,3]
>>> b = a
>>> a[2] = 9     ←リストaに更新をかける
>>> a
[1, 2, 9]
>>> b
[1, 2, 9]       ←リストbも更新されてしまっている
  
リストbはリストaと同じ場所を参照するだけなので、リストaが参照しているデータを更新するとリストbが参照しているデータも更新されてしまう。
 
 
そこでcopy()メソッドを使う。
 
>>> a = [1,2,3]
>>> b = a.copy()   ←(リスト).copy() という使い方
>>> a[2] = 9
>>> a
[1, 2, 9]
>>> b
[1, 2, 3]       ←リストbは更新されていない
 
 
copy()を使ってリストbを設定することで、別のリストとして扱えるようになる。
 
 
辞書も同様。
>>> d1 = {"a":1, "b":2, "c":3}
>>> d1
{'b': 2, 'a': 1, 'c': 3}
>>> d2 = d1.copy()          ←(辞書).copy() という使い方
>>> d2
{'b': 2, 'a': 1, 'c': 3}
>>> d1['b'] = '99'
>>> d1
{'b': '99', 'a': 1, 'c': 3}
>>> d2
{'b': 2, 'a': 1, 'c': 3}          ←辞書d2は更新されない
 
 
タプルをコピーしようとすると、以下のようにエラーになってしまった。
タプルはimmutable(変更不可)なオブジェクトだから、copy()メソッドが用意されていないらしい。
(リストと辞書はmutable(変更可能)なオブジェクト)
 
>>> t1 = (1,2,3)
>>> t1
(1, 2, 3)
>>> t2 = t1.copy()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'copy'
     ←タプルはcopyメソッドを持っていない、というエラーになる。
 
 
#リストのコピー
#辞書のコピー
#タプルのコピー