MENU

【Python】オブジェクトをコピーするcopyの使い方と注意点を解説

Pythonプログラミングでは、オブジェクトを複製する際にcopy()を使用することがありますが、どうやって使えばいいのかわからない人もいるのではないでしょうか。

そこでこの記事では、オブジェクトをコピーする際に使用するcopy()の使い方から注意点まで詳しく解説していきます。

目次から探す

オブジェクトのコピー方法

Pythonでオブジェクトをコピーする方法には、浅いコピー(shallow copy)と深いコピー(deep copy)の2種類があります。

それぞれの使い方と注意点を解説します。

浅いコピー(shallow copy)

浅いコピーは、オブジェクトの最上位のコンテナを新たに作成し、元のオブジェクトと同じ参照を持つコピーを作成します。

つまり、コピー元とコピー先のオブジェクトが、内部の要素に対して同じ参照を持ちます。

copy.copy()関数の使い方

浅いコピーを作成するには、copyモジュールの copy() 関数を使用します。

以下のように使います。


import copy
original_object = [1, 2, [3, 4]]
shallow_copied_object = copy.copy(original_object)

浅いコピーの例

浅いコピーの動作を確認するための例を示します。


import copy
original_object = [1, 2, [3, 4]]
shallow_copied_object = copy.copy(original_object)
print("元のオブジェクト:", original_object)
print("浅いコピー後のオブジェクト:", shallow_copied_object)
original_object[2][0] = 99
print("元のオブジェクトを変更後:", original_object)
print("浅いコピー後のオブジェクトを変更後:", shallow_copied_object)
元のオブジェクト: [1, 2, [3, 4]]
浅いコピー後のオブジェクト: [1, 2, [3, 4]]
元のオブジェクトを変更後: [1, 2, [99, 4]]
浅いコピー後のオブジェクトを変更後: [1, 2, [99, 4]]

この例では、元のオブジェクトの内部リストの要素を変更したところ、浅いコピー後のオブジェクトも同じ変更が反映されています。

これは、浅いコピーが内部の要素に対して同じ参照を持っているためです。

深いコピー(deep copy)

深いコピーは、オブジェクトのすべての階層にわたって新しいコンテナを作成し、元のオブジェクトとは異なる参照を持つコピーを作成します。

つまり、コピー元とコピー先のオブジェクトが、内部の要素に対して異なる参照を持ちます。

copy.deepcopy()関数の使い方

深いコピーを作成するには、copyモジュールの deepcopy() 関数を使用します。

以下のように使います。


import copy
original_object = [1, 2, [3, 4]]
deep_copied_object = copy.deepcopy(original_object)

深いコピーの例

深いコピーの動作を確認するための例を示します。


import copy
original_object = [1, 2, [3, 4]]
deep_copied_object = copy.deepcopy(original_object)
print("元のオブジェクト:", original_object)
print("深いコピー後のオブジェクト:", deep_copied_object)
original_object[2][0] = 99
print("元のオブジェクトを変更後:", original_object)
print("深いコピー後のオブジェクトを変更後:", deep_copied_object)
元のオブジェクト: [1, 2, [3, 4]]
深いコピー後のオブジェクト: [1, 2, [3, 4]]
元のオブジェクトを変更後: [1, 2, [99, 4]]
深いコピー後のオブジェクトを変更後: [1, 2, [3, 4]]

この例では、元のオブジェクトの内部リストの要素を変更しても、深いコピー後のオブジェクトには影響がありません。

これは、深いコピーが内部の要素に対して異なる実体の参照を持っているためです。

1 2
目次から探す