Pythonでリストをコピーする方法!copy()・スライス・list()の使い方を比較
生徒
「Pythonでリストの中身をコピーしたいんですが、どうすればいいですか?」
先生
「Pythonには、リストをコピーするための方法がいくつかあります。copy()メソッドや、スライス構文、list()関数などを使います。」
生徒
「それぞれの方法には、違いがあるんですか?」
先生
「はい、基本的な使い方から順番に、丁寧に解説していきましょう!」
1. リストとは?コピーとは何をすること?
まず、Pythonのリストは、複数のデータを順番にまとめて管理できる便利なデータ型です。 数字や文字列など、いくつもの値を一つにまとめて扱えるため、初心者の方が最初に学ぶことの多い仕組みでもあります。 例えるなら、リストは「中にいくつかの要素が入った箱」のような存在です。
そしてリストをコピーするというのは、その箱を丸ごともう一つ作るイメージです。
見た目や中身は同じでも、別の箱として扱われるため、片方を変更してももう片方には影響しません。
この考え方を理解しておくことが、Pythonで安全にデータを扱ううえでとても重要になります。
以下は、基本的なリストの作成例です:
colors = ["赤", "青", "緑"]
このリストには、「赤」「青」「緑」という3つの要素が順番に入っています。 ここから新しいリストを作りたいとき、ただ代入するだけでは不十分な場合があります。 そこで登場するのが、リストを正しくコピーする方法です。
これから、このcolorsをもとに、新しいリストを作るための代表的な方法を3つ紹介していきます。
それぞれの特徴を知ることで、状況に応じた使い分けができるようになります。
2. copy()メソッドでコピーする
copy()は、Pythonのリストが最初から持っている専用のメソッドで、
リストの中身をそのまま別のリストとして複製したいときに使われます。
書き方がとてもシンプルなので、初心者の方でも直感的に理解しやすい方法です。
「元のリストはそのまま残して、新しいリストを作りたい」という場面では、 まず最初に覚えておきたいコピー方法と言えるでしょう。
colors = ["赤", "青", "緑"]
# copy()でリストをコピー
new_colors = colors.copy()
print(new_colors)
['赤', '青', '緑']
このようにcolors.copy()を使うと、
もとのリストと同じ要素を持つ新しいリストnew_colorsが作られます。
見た目は同じですが、中身は別物なので、あとから片方を変更しても
もう片方には影響しません。
コードの意味が読み取りやすく、「コピーしている」ことが一目で分かる点も、
copy()メソッドの大きなメリットです。
3. スライス構文([:])でコピーする
スライスとは、Pythonのリストから指定した範囲の要素を取り出すための書き方です。
ふだんは一部分を抜き出すときに使われますが、開始位置と終了位置を省略して
[:]と書くことで、リスト全体をそのままコピーすることができます。
この方法は、リストの最初から最後までをまとめて取り出しているだけなので、
結果として新しいリストが作られます。copy()と同じように、
元のリストとは別物として扱われる点がポイントです。
colors = ["赤", "青", "緑"]
# スライス構文でリスト全体をコピー
new_colors = colors[:]
print(new_colors)
['赤', '青', '緑']
スライス構文は少し記号が多く、最初は意味が分かりにくいかもしれませんが、
「[:]は全部取り出す」と覚えておくと理解しやすくなります。
昔から使われている方法なので、他の人のPythonコードを読むときにも
よく見かける書き方です。
4. list()関数でコピーする
Pythonにはlist()という関数があり、リストを引数に渡すと、新しいリストを作ることができます。
colors = ["赤", "青", "緑"]
new_colors = list(colors)
print(new_colors)
['赤', '青', '緑']
list()関数は、リスト以外のデータ型(たとえば文字列など)もリストに変換できる汎用的な方法です。
5. 代入(=)ではコピーにならない理由
初心者がよく間違えるのが、=を使ってコピーしようとすることです。実はこれは、コピーではありません。
colors = ["赤", "青", "緑"]
new_colors = colors
new_colors[0] = "黄色"
print(colors)
['黄色', '青', '緑']
このように、片方を変更するともう片方も変わるのは、同じリストを共有しているからです。これは参照(さんしょう)と呼ばれるしくみです。
6. 3つのコピー方法を比較しよう
ここまで紹介したcopy()、[:]、list()の3つは、どれも新しいリストを作る方法です。それぞれの違いや特徴を簡単に整理しておきましょう。
| 方法 | 特徴 | Pythonのバージョン |
|---|---|---|
copy() |
最もわかりやすく直感的。Python3.3以降で使用可能。 | 3.3以上 |
[:] |
昔から使われている。リストにしか使えない。 | すべて |
list() |
他のデータ型にも使える。少し冗長。 | すべて |
7. コピーしたリストを使ってもとのリストを守ろう
コピーしたリストを使うことで、もとのリストの内容を変更から守ることができます。これは、データを壊さずに使いまわすためにとても重要です。
colors = ["赤", "青", "緑"]
safe_copy = colors.copy()
safe_copy.append("オレンジ")
print("コピー後:", safe_copy)
print("元のリスト:", colors)
コピー後: ['赤', '青', '緑', 'オレンジ']
元のリスト: ['赤', '青', '緑']
このように、コピーを使えば、元のリストには影響を与えずに新しい操作ができます。
まとめ
Pythonでリストをコピーする方法は、プログラムを安全に扱うための基本的でありながら非常に重要な技術です。特にリストは、複数のデータをまとめて保持できる便利な構造ですが、そのまま代入してしまうと互いに影響し合い、思わぬバグの原因となります。この記事では、copy()・スライス構文[:]・list()関数の3つのコピー方法を比較しながら、それぞれの特徴と具体的な使い方を丁寧に確認してきました。Pythonを使う場面では、データを誤って変更してしまうことを防ぐために、「元のリストを汚さずに操作したい」「コピーしたデータを別用途で使いたい」という状況が非常に多くあります。そのため、どの方法でリストをコピーすべきかを理解しておくことは、Pythonプログラミングの基礎力を高めるための大きな一歩となります。
まずcopy()メソッドは、もっとも直感的でわかりやすいコピー方法です。Python3.3以降で利用可能で、コードも短く見通しもよいため、多くの開発者にとって扱いやすい選択肢です。次にスライス構文の[:]は、Pythonが古くから備えている方法で、特別な関数を呼ばずに書けるシンプルさが魅力です。また、list()関数は、リスト以外をリストに変換するときにも使える汎用的な方法であり、リストそのもののコピーにも利用できます。これら3つの方法はすべて「浅いコピー」を行うという点では共通しており、どれを使っても基本的なリストの複製は可能です。使う場面やコードの読みやすさを考えて、適切な方法を選ぶことが重要です。
また、代入=ではリストのコピーにはならないという点も押さえておく必要があります。代入はまったく新しいリストを作るわけではなく、同じリストを共有する「参照」になるため、一方を変更するともう一方も変更されてしまいます。この仕組みは初心者がよくつまずくポイントですが、Pythonの内部動作を理解する上でも非常に重要です。リストコピーの方法を誤ると、データが勝手に書き換わるように見える不具合が起きることがあるため、今回の内容をしっかり理解しておくと、実務でも学習でも大きなトラブルを防ぐことができます。
今回の内容をまとめつつ、実際に3つのコピー方法をひとつの例として整理したサンプルコードも用意しました。Pythonでリストを扱う頻度は非常に高いため、実際のコードを書きながら「どの方法がもっとも適しているか」を判断できるようになると、より安全で効率的なプログラムが作れるようになります。
# 3つの方法をまとめたサンプルコード
colors = ["赤", "青", "緑"]
# 1. copy() メソッド
copy_method = colors.copy()
# 2. スライス [:]
slice_method = colors[:]
# 3. list() 関数
list_method = list(colors)
print("copy():", copy_method)
print("スライス:", slice_method)
print("list():", list_method)
# 各コピーが独立しているか確認
copy_method.append("紫")
print("元のリスト:", colors)
print("コピー後:", copy_method)
このように、Pythonのリストコピーは基本的なテクニックのひとつですが、プログラムの安全性を保ち、元データを破壊しないための重要な習慣です。特に複数のデータを扱うアプリケーションや、ユーザー入力を扱うプログラムでは、コピーを正しく使うことで多くの問題を未然に防げます。今回学んだ3つの方法をうまく使い分けることで、より安定したコードを書けるようになり、Pythonの理解も深まります。初心者でも使いやすい機能ばかりなので、実際に手を動かしながら試してみることをおすすめします。
生徒
「copy()、スライス、list() の3つの方法があるって初めて知りました。どれも似ていますが、使いやすさが違うんですね。」
先生
「そうですね。コードの見た目や意図をどれだけ明確にしたいかで使い分けられますよ。特にcopy()は直感的で読みやすい方法です。」
生徒
「代入がコピーにならないのも理解できました。同じリストを共有してしまうのは危険ですね。」
先生
「その通りです。参照を理解していないと、予想外の変更が起きてしまいますからね。安全に操作したいときは、必ず何らかのコピー方法を使います。」
生徒
「コピーしたリストなら、気兼ねなく変更できますね。元のデータを守れるのが便利だと思いました。」
先生
「正しく理解できていますね。今回の学びが、今後複雑なプログラムを書くときに大いに役立つはずですよ。」