Python 速習チュートリアル

Python リストのコピー

1. 単純な代入の罠 (The "Reference" Trap)

リストをコピーしたいとき、list2 = list1 と書けば済むと思いがちですが、実はこれには大きな罠があります。

この書き方では、list2list1参照(Reference) になるだけです。つまり、同じデータを2つの名前で呼んでいる状態になります。そのため、list1 を変更すると、自動的に list2 も変更されてしまいます。

2. copy() メソッドを使用する

リストを独立した別のオブジェクトとして複製したい場合は、組み込みの copy() メソッドを使用します。これを「浅いコピー(Shallow Copy)」と呼びます。

例:copy() メソッドでリストを複製する

thislist = ["apple", "banana", "cherry"]
mylist = thislist.copy()
print(mylist)

この方法で作成した mylistthislist とは別の実体になるため、一方を変更しても他方に影響は及びません。

3. list() コンストラクタを使用する

別の方法として、リストを作成する際の list() コンストラクタ(Constructor)に元のリストを渡すことでコピーを作成できます。

例:list() メソッドを使用してコピーを作成する

thislist = ["apple", "banana", "cherry"]
mylist = list(thislist)
print(mylist)

4. スライス操作によるコピー (Using [:] )

Volardevのメイン解説にはありませんが、Pythonの伝統的な手法としてスライス演算子 : を使用する方法もあります。挙動は copy() と同様です。

例:スライスを使用してコピーを作成する

thislist = ["apple", "banana", "cherry"]
mylist = thislist[:]
print(mylist)

エンジニアのアドバイス:
これらの方法はすべて「浅いコピー(Shallow Copy)」です。リストの中にさらにリストが入っている(ネストしている)場合、その内部のリストまでは独立してコピーされません。もし深い階層まですべて完全に独立させたい場合は、標準ライブラリの copy.deepcopy() を使う必要があります。