Python でリストをディープコピーする

Samyak Jain 2023年1月30日
  1. Python で copy.deepcopy() 関数を使用してリストをディープコピーする
  2. Python でリスト内包表記を使用してリストをディープコピーする
Python でリストをディープコピーする

Python で浅いコピーと深いコピーを作成できます。リストのディープコピーとは、新しいリストを作成してから、元のリストの要素のコピーを再帰的に挿入することです。これはリストの複製を指し、元のリストに加えられた変更は複製されたリストには影響しません。

Python で copy.deepcopy() 関数を使用してリストをディープコピーする

copy モジュールの deepcopy() 関数は、指定されたリストのディープコピーを作成するために使用されます。このコピーを変更しても、元のリストの内容は同じままで、変更されません。

例えば、

import copy

A = [[10, 60], [50, "Hi"], ["Hello", 5, 80]]
B = copy.deepcopy(A)
A[2][0] = "World"
A[0][1] = 10
print("List A is : % s" % (A))
print("List B is : % s" % (B))

出力:

List A is : [[10, 10], [50, 'Hi'], ['World', 5, 80]]
List B is : [[10, 60], [50, 'Hi'], ['Hello', 5, 80]]

リスト B はリスト A のディープコピーであるため、リスト A に新しい値が割り当てられた後、リスト B は変更されません。リスト A とリスト B は互いに独立しています。

Python でリスト内包表記を使用してリストをディープコピーする

Python のリスト内包表記は、リスト、タプル、文字列などの他の反復可能オブジェクトから新しいリストを作成するために使用されます。リスト内包表記により、コードがシンプルかつ効率的になります。

基本的に、deepcopy() 関数が行うことを実行し、このメソッドで指定されたリストの新しいコピーを再帰的に作成します。

例えば、

A = [2, 4, 6, 8, 10]
B = [i for i in A]
A[0] = "Hi"
print("List A is : % s" % (A))
print("List B is : % s" % (B))

出力:

List A is : ['Hi', 4, 6, 8, 10]
List B is : [2, 4, 6, 8, 10]

リスト内包表記なしでこのメソッドを実行し、従来の方法で for ループを使用することもできます。ただし、コードの行数と時間がかかります。

関連記事 - Python List