用語比較
代入とスライスによるコピーの違い(b = a と b = a[:])
リスト a に対して b = a と書くと、b は a と同じリストを指します。b = a[:] と書くと、b は a の要素を持つ新しいリストを指します。違いは、片方を変更したときにもう片方へ見えるかどうかに出ます。
Python3基礎試験では、設問のコードから代入だけか、スライスで新しいリストを作っているかを読み分けます。変更を加えたあとにどちらの変数を表示しているかを見落とすと、答えを取り違えやすい分野です。
このページでは、代入の動き、スライスの動き、list.copy() との関係という三つの軸で比較します。章別の問題は第3章で確認できます。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。
- 公式一次資料と照合した内容
- 単純な代入がデータをコピーせず既存のリストを参照すること(id が等しく、片方への変更がもう片方にも見えること)、スライスが新しいリストを返し浅いコピーになること、list.copy() が浅いコピーを返し a[:] と同様であることは、Python公式チュートリアルの3.1.3と5.1へ2026-10-12に照合しています。
- 編集部が学習用に整理した内容
- 試験での判定手順と使い分けの目安は編集部の学習上の整理です。
資格ごとの公式資料の一覧
結論
公式一次資料と照合:用語の定義は公式一次資料と照合しています。
b = a(代入)
データをコピーしない。b は a が参照している既存のリストを参照するため、どちらの変数を通して変更しても、もう一方から確認できる。
b = a[:](スライス)
全てのスライス操作は新しいリストを返す。a[:] は a の浅いコピーを返すため、b を変更しても元の a は変わらない。
違いを表で確認
| 比較軸 | b = a(代入) | b = a[:](スライス) |
|---|---|---|
| データのコピー | しない。既存のリストを参照する | する。新しいリストを返す(浅いコピー) |
| id(a) == id(b) | True(同じオブジェクトを参照している) | 新しいリストなので、同じオブジェクトではない |
| b.append(x) を実行したとき | a からも x が確認できる | a は変わらない |
| 同じ動きをするメソッド | なし | list.copy() は浅いコピーを返し、a[:] と同様 |
| 選択肢で探すキーワード | 参照、同じオブジェクト、id が等しい | 新しいリスト、浅いコピー、スライス |
公式一次資料と照合:Python3エンジニア認定基礎試験: 2026-09-18に一次資料で確認一次資料の一覧を見る →
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
b = a でリストを複製できたと思っている人
公式チュートリアルは、単純な代入ではPythonは決してデータをコピーしないと述べます。リストを変数に代入すると、その変数は既存のリストを参照します。複製したいときは、スライスや list.copy() を使います。
コピーしたあとの変更が元にも見えると思っている人
公式チュートリアルの例では、rgba[:] で作った correct_rgba の末尾要素を書き換えても、元の rgba は変わりません。スライスは新しいリストを返すためです。
list.copy() とスライスは別物だと思っている人
公式チュートリアルは、list.copy() がリストの浅いコピーを返し、a[:] と同様だと述べます。どちらも新しいリストを返す書き方です。
具体例で使い分ける
編集部の整理
例 1
『rgba = rgb のあとで rgba.append を実行し、rgb を表示する』コードが出た場合
rgb = ["Red", "Green", "Blue"] に rgba = rgb と代入し、rgba の末尾へ "Alph" を追加してから rgb を表示しています。
- rgba = rgb は代入だけで、データはコピーされません。
- id(rgb) == id(rgba) は True になり、2つの変数は同じオブジェクトを参照しています。
- rgba への変更は、rgb を通しても確認できます。
結論: rgb の表示は ["Red", "Green", "Blue", "Alph"] になります。
例 2
『correct_rgba = rgba[:] のあとで correct_rgba[-1] を書き換え、rgba を表示する』コードが出た場合
rgba のスライスを correct_rgba に代入し、correct_rgba の末尾要素を "Alpha" に書き換えたあと、両方を表示しています。
- rgba[:] は新しいリスト(浅いコピー)を返します。
- 書き換えたのは新しいリストの要素なので、元の rgba には影響しません。
- correct_rgba は ["Red", "Green", "Blue", "Alpha"]、rgba は ["Red", "Green", "Blue", "Alph"] のままです。
結論: スライスで作ったリストへの変更は、元のリストへ及ばないと答えます。
例 3
『リストの浅いコピーを返すメソッド』を問われた場合
選択肢に list.copy()、list.append()、list.clear() などが並んでいます。
- 公式チュートリアル5.1は、list.copy() をリストの浅いコピーを返すメソッドと説明します。
- a[:] と同様、という説明も添えられています。
- append() は要素を足すメソッド、clear() は全ての要素を削除するメソッドで、コピーを作るものではありません。
結論: 浅いコピーを返すメソッドは list.copy() と答えます。
問題文から答えを選ぶ手順
編集部の整理:試験での判定手順と使い分けの目安は編集部の学習上の整理です。
- 1
右辺を確認する
右辺が変数名だけなら代入、末尾に [:] が付くならスライスによるコピーです。list.copy() も新しいリストを返します。
- 2
変更する側を確認する
append() や要素への代入など、リストの中身を変える操作が、どの変数に対して行われているかを見ます。
- 3
表示する側を確認する
代入なら同じリストなので、どちらを表示しても変更が見えます。スライスなら、変更していない側には変更が見えません。
- 4
id の比較を確認する
id が等しいなら同じオブジェクトを参照しています。
試験での見分け方
編集部の整理
- 1単純な代入は、データをコピーしない。変数は既存のリストを参照する。
- 2ある変数を通してリストを変更すると、そのリストを参照している他の変数からも確認できる。
- 3全てのスライス操作は、指定した要素を含む新しいリストを返す。a[:] はリストの浅いコピーを返す。
- 4list.copy() はリストの浅いコピーを返し、a[:] と同様に使える。
- 5リストは可変型なので、要素の入れ替えや append() による追加ができる。
誤答しやすい選択肢
b = a で、新しいリストが作られると考える
修正: 代入はデータをコピーしません。b と a は同じリストを参照します。
b = a のあとで b を変更しても、a は変わらないと考える
修正: 同じリストを参照しているので、b への変更は a からも確認できます。
a[:] の結果が元のリストと同じオブジェクトだと考える
修正: スライスは新しいリストを返します。a[:] を書き換えても、元の a には影響しません。
変更後に表示している変数を見落とす
修正: どの変数を変更し、どの変数を表示しているかを先に確認します。スライスなら、変更した側だけに変更が表れます。
確認問題
Q1rgba = rgb と代入したとき、id(rgb) == id(rgba) の結果は何ですか?
答え: True
公式チュートリアルは、代入ではデータがコピーされず、2つの変数が同じオブジェクトを参照すると示しています。
Q2correct_rgba = rgba[:] としたあと、correct_rgba の末尾要素を書き換えると、元の rgba は変わりますか?
答え: 変わらない
スライスは新しいリストを返す浅いコピーなので、書き換えたのは新しいリストの要素だけです。
Q3リストの浅いコピーを返し、a[:] と同様に使えるメソッドはどれですか?
答え: list.copy()
公式チュートリアル5.1が、list.copy() をリストの浅いコピーを返すメソッドで、a[:] と同様だと説明しています。
到達チェック
- 代入がデータをコピーせず、同じリストを参照することを言える
- スライスが新しいリストを返す浅いコピーであることを説明できる
- id の比較が True になる条件を答えられる
- list.copy() が a[:] と同様であることを言える
- 変更した変数と表示する変数を先に見分けられる
関連ページで確認する
同じ資格で次に知りたいこと
- for文とwhile文の使い分け
Pythonの for 文と while 文の違いを、繰り返しの終わり方、range()、else節、break と continue の動き、Python3基礎試験での判断手順と確認問題まで解説します。
- *args と **kwargs の違い(位置引数のまとめ受けとキーワード引数のまとめ受け)
関数定義の *args と **kwargs の違いを、タプルと辞書で受け取る点、並び順の決まり、呼び出し側の * と ** によるアンパックまで、Python3基礎試験の判断手順と確認問題つきで解説します。
- 例外処理の try/except と if による事前確認の違い
Pythonの try/except(例外処理)と if による事前確認の違いを、処理の流れ、書き方の名前(EAFPとLBYL)、競合状態の注意点、Python3基礎試験での判断手順と確認問題まで解説します。
よくある質問
Qb = a と b = a[:] の最大の違いは何ですか?
b = a はデータをコピーせず同じリストを参照します。b = a[:] は新しいリスト(浅いコピー)を作ります。
Qb = a のあとで b.append(1) を実行すると、a はどうなりますか?
a からも追加した要素が確認できます。同じリストを参照しているためです。
Qa[:] で作ったリストを変更すると、元の a は変わりますか?
変わりません。スライスは新しいリストを返すためです。
Qlist.copy() と a[:] は同じ意味ですか?
公式チュートリアルは、list.copy() がリストの浅いコピーを返し、a[:] と同様だと述べています。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
