用語比較
ミュータブルとイミュータブルの違い|リスト・タプル・文字列の変更と代入をPython3エンジニア認定基礎試験で判断する
Pythonでは、リストは作成後に要素を書き換えられますが、文字列やタプルは書き換えられません。公式チュートリアルは「Python の文字列は変更できません -- つまり不変です」と述べ、word[0] = 'J' のように位置を指定して代入するとエラーが発生する例を示しています。
変更できるかどうかの違いは、代入したときの動きにも表れます。公式チュートリアルは、単純な代入ではPythonは決してデータをコピーせず、リストを変数に代入するとその変数は既存のリストを参照すると説明しています。別の名前から見ても、同じリストへの変更が見えます。
このページは、リスト・タプル・文字列を「変更できるかどうか」で分けて覚えたい人を対象にしています。リストとタプルだけを比べたいときは「リストとタプルの違い」のページを、リストへの追加方法を比べたいときは「append()とextend()の違い」のページを先に読んでも構いません。ここでは文字列を含めた3つを並べ、代入とコピーでどう見えるかまで確認します。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。Python3エンジニア認定基礎試験の一次情報確認日: 2026-09-18。
結論
ミュータブル(変更できる)
作成後も内容をその場で変更できる型。リストが代表例で、append()などのメソッドや要素への代入で変更できる。
イミュータブル(変更できない)
作成後に内容を変更できない型。文字列とタプルが代表例で、位置を指定した代入はTypeErrorになる。内容を変えたいときは新しい値を作る。
違いを表で確認
| 比較軸 | ミュータブル(変更できる) | イミュータブル(変更できない) | 文字列 |
|---|---|---|---|
| 作成後に変更できるか | リスト:変更できる。append()や要素への代入でその場で変える | タプル:変更できない。t[0] = 88888 はTypeErrorになる | 文字列:変更できない。word[0] = 'J' はエラーになる |
| 位置を指定した代入 | できる | TypeError: 'tuple' object does not support item assignment | TypeError: 'str' object does not support item assignment |
| 内容を変えたいとき | その場で変更する | 新しいタプルを作り直す | 新しい文字列を作る(例:'J' + word[1:] は 'Jython') |
| 辞書のキーに使えるか | 使えない。変更できるため | 文字列・数値・他のタプルのみを含む場合は使える | 常に使える |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
試験範囲を通して読むときの1冊です。読んだ章は、このサイトの章別問題で確かめられます。
どこで迷っているかを切り分ける
文字列の一部を書き換えようとして TypeError になった初学者
word = 'Python' に対して word[0] = 'J' と書くと、文字列は不変なのでエラーになります。公式チュートリアルは、元の文字列と別の文字列が必要なときは新しく文字列を作成するよう説明し、'J' + word[1:] が 'Jython' になる例を示しています。書き換えるのではなく、作り直すと覚えます。
リストを別の変数に代入して、元のリストも変わって驚いた人
rgb = ["Red", "Green", "Blue"] に rgba = rgb と代入しても、データはコピーされず、同じリストを指します。公式チュートリアルでは、このとき id(rgb) == id(rgba) が True になり、rgba.append("Alph") のあとに rgb にも "Alph" が見えると示されています。別々のリストが欲しいときはコピーを作ります。
スライスでコピーしたつもりの再受験者
公式チュートリアルは、全てのスライス操作は新しいリストを返し、rgba[:] はリストの浅いコピーを返すと説明しています。コピーの末尾要素を書き換えても元のリストは変わらない例が示されています。list.copy() も同様に浅いコピーを返し、a[:] と同様だと記されています。
問題文から答えを選ぶ手順
- 1
型を確認する
対象がリストなら変更できる、文字列かタプルなら変更できない、とまず分けます。
- 2
位置を指定した代入があるか見る
文字列やタプルの要素へ代入する式はTypeErrorになります。リストなら代入できます。
- 3
代入だけでコピーした気になっていないか見る
変数への代入は同じリストを指すだけです。別のリストが必要な場面では、スライス [:] や list.copy() で新しいリストを作ります。
- 4
辞書のキーかどうか確認する
辞書のキーには変更不能な型が必要です。文字列・数値はキーにでき、リストはキーにできません。
試験での見分け方
- 1リストは作成後も変更できる。文字列とタプルは作成後に変更できない。
- 2文字列やタプルの要素へ代入すると TypeError になる。内容を変えたいときは新しい値を作る。
- 3変数への単純な代入ではデータはコピーされず、同じオブジェクトを参照する。リストは一方の名前から変更するともう一方の名前からも見える。
- 4スライス [:] と list.copy() は、リストの浅いコピーを新しく作る。
- 5辞書のキーには変更不能な型が必要。文字列・数値は常にキーにでき、タプルは文字列・数値・他のタプルのみを含む場合に限りキーにできる。
誤答しやすい選択肢
文字列にもリストと同じ感覚で要素代入を書く
修正: 文字列は不変なので、word[0] = 'J' や word[2:] = 'py' はTypeErrorになります。新しい文字列を作る形('J' + word[1:] など)に書き換えます。
代入でリストが複製されると思い込む
修正: rgba = rgb は同じリストを参照させる操作です。複製が必要ならスライスの rgb[:] や rgb.copy() を使います。
スライスの結果が元のリストを指すと考える
修正: 公式チュートリアルは、スライスは新しいリストを返すと説明しています。コピー側の要素を代入で書き換えても、元のリストは変わりません。
タプルなら中身が必ず変わらないと考える
修正: 公式チュートリアルは、タプルにリストのような変更可能なオブジェクトを含められると述べています。タプル自体の要素の差し替えはできませんが、含まれるリストの内容は変更できます。
確認問題
Q1word = 'Python' に対して word[0] = 'J' を実行するとどうなる?
答え: TypeError: 'str' object does not support item assignment
文字列は不変なので、位置を指定した代入はエラーになります。
Q2rgb = ["Red", "Green", "Blue"] のあとに rgba = rgb と代入し、rgba.append("Alph") を実行した。rgb はどうなる?
答え: rgb にも "Alph" が見える(同じリストを参照している)
単純な代入ではデータはコピーされず、既存のリストを参照します。一方の名前からの変更は、もう一方の名前からも見えます。
Q3リストの浅いコピーを作る書き方として、公式チュートリアルが挙げているものはどれ?
答え: スライス [:] と list.copy()
スライス操作は新しいリストを返し、rgba[:] は浅いコピーになります。list.copy() は a[:] と同様に浅いコピーを返します。
到達チェック
- リスト・タプル・文字列のうち、変更できるのはリストだけだと説明できる
- 文字列の要素代入が TypeError になる理由を、不変の言葉で説明できる
- 代入ではコピーされず、同じオブジェクトを参照することを例で説明できる
- スライス [:] と list.copy() が浅いコピーを返すことを説明できる
関連ページで確認する
同じ資格で次に知りたいこと
- リストと集合と辞書の使い分け
Pythonのリスト・集合・辞書の違いを、順序、重複、取り出し方、キーにできる型、空のものの作り方、Python3エンジニア認定基礎試験での判断手順と確認問題まで解説します。
- importとfrom〜importの違い|名前空間に入る名前・as・*をPython3エンジニア認定基礎試験で判断する
import文とfrom〜import文の違いを、公式チュートリアルの記述、名前空間に追加される名前、asによる別名、from 〜 import *と__all__の関係、Python 3 エンジニア認定基礎試験での判断手順と確認問題まで解説します。
- リスト内包表記とfor文の使い分け
リスト内包表記とfor文の使い分けを、同じ処理の書き比べ、ifの位置、ループ変数の扱い、Python 3 エンジニア認定基礎試験での読み取り手順と確認問題まで解説します。
よくある質問
Qミュータブルとイミュータブルの違いは?
作成後に内容を変更できる型がミュータブル、できない型がイミュータブルです。リストは変更でき、文字列とタプルは変更できません。
Q文字列の一部だけを書き換えるには?
文字列は変更できないので、新しい文字列を作ります。公式チュートリアルの例では、'J' + word[1:] で 'Jython' が得られます。
Qリストを別の変数に代入すると、コピーされる?
コピーされません。単純な代入では、変数は既存のリストを参照します。別のリストが必要なときは、スライス [:] や list.copy() で浅いコピーを作ります。
Qタプルの中のリストは変更できる?
できます。タプルにはリストのような変更可能なオブジェクトを含められ、タプルの要素そのものを差し替えることはできませんが、含まれるリストの内容は変更できます。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: ミナト編集部(運営者情報を見る)
