※このページではアフィリエイト広告を利用しています

【Python入門】リストを複製する方法とは?copy()メソッドの使い方をやさしく解説!

Python

Pythonでリスト(List型)を使っていると、「元のリストと同じ内容のコピーを作りたい」と思うことがよくあります。
この記事では、そんなときに使える copy() メソッドについて、初心者向けにわかりやすく解説します。

スポンサーリンク
スポンサーリンク

Pythonにおけるリストのコピーとは?

Pythonのリストは参照型のオブジェクトです。つまり、別の変数に代入しても、「同じデータを指している」だけであり、コピーではないという点に注意が必要です。

単純な代入ではコピーにならない

a = [1, 2, 3]
b = a
b[0] = 100
print(a)  # → [100, 2, 3]

解説:b = a は「aをbにコピーした」のではなく、「aをbに参照させた」だけなので、bを変更するとaも変わってしまいます。

copy()メソッドの使い方

Pythonでは、リストの内容を複製するには、copy() メソッドを使います。

構文(基本型)

新しい変数 = 元のリスト.copy()

実際のコード例で確認してみよう

test = [55, 70, 90, 90, 80, 45]
print("元のリスト:", test)

test2 = test.copy()
print("コピーしたリスト:", test2)

実行結果:

元のリスト: [55, 70, 90, 90, 80, 45]
コピーしたリスト: [55, 70, 90, 90, 80, 45]

結果からわかるように、test.copy() によって 元のリストと同じ内容の新しいリストが作成されています。
このコピーは独立しており、test2を変更してもtestには影響しません。

copy()でコピーしたリストは独立しているのか?

独立している(シャローコピー)

test2[0] = 999
print("元のリスト:", test)
print("変更後のコピー:", test2)
元のリスト: [55, 70, 90, 90, 80, 45]
変更後のコピー: [999, 70, 90, 90, 80, 45]

→ コピー元 test は変更されていません!これは「シャローコピー(浅いコピー)」と呼ばれるものです。

注意!copy()では深いコピーにはならない

リストの中にさらにリスト(多次元リスト)がある場合、copy() メソッドは内部のリストまではコピーしません。内部リストは参照されたままになります。

例:シャローコピーの落とし穴

a = [[1, 2], [3, 4]]
b = a.copy()
b[0][0] = 999
print(a)  # → [[999, 2], [3, 4]]

解説:外側のリストはコピーされても、内側のリスト([1, 2]など)は参照のままです。

完全に独立したコピーが欲しいときは?

deepcopy(ディープコピー)を使いましょう。これはcopyモジュールに含まれています。

import copy

a = [[1, 2], [3, 4]]
b = copy.deepcopy(a)
b[0][0] = 999
print(a)  # → [[1, 2], [3, 4]]
print(b)  # → [[999, 2], [3, 4]]

deepcopy()すべての階層のオブジェクトを完全にコピーするので、多次元リストを使う場合はこちらがおすすめです。

関連記事(内部リンク)

まとめ

操作方法説明
b = a参照をコピー。変更すると両方影響する
b = a.copy()シャローコピー。浅いレベルで独立
b = copy.deepcopy(a)ディープコピー。完全に独立(多次元に有効)

おわりに

Pythonでリストを扱う場面はとても多いです。
正しくコピーを使い分けることで、予期せぬバグやデータ破壊を防ぐことができます。

特に多次元リストや辞書を含むリストなどを操作する場合は、コピーの挙動を意識することが大切です。

タイトルとURLをコピーしました