Python リストのコピー
1. 単純な代入の罠 (The "Reference" Trap)
リストをコピーしたいとき、list2 = list1 と書けば済むと思いがちですが、実はこれには大きな罠があります。
この書き方では、list2 は list1 の 参照(Reference) になるだけです。つまり、同じデータを2つの名前で呼んでいる状態になります。そのため、list1 を変更すると、自動的に list2 も変更されてしまいます。
2. copy() メソッドを使用する
リストを独立した別のオブジェクトとして複製したい場合は、組み込みの copy() メソッドを使用します。これを「浅いコピー(Shallow Copy)」と呼びます。
例:copy() メソッドでリストを複製する
thislist = ["apple", "banana", "cherry"]
mylist = thislist.copy()
print(mylist)この方法で作成した mylist は thislist とは別の実体になるため、一方を変更しても他方に影響は及びません。
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() を使う必要があります。