Python | ミュータブル(mutable)/イミュータブル(immutable)の違い

Python
スポンサーリンク

以下では、できるだけ直感的に理解できるように、図(イメージ)を使って
ミュータブル(mutable)/イミュータブル(immutable)の違いを説明します。

図は「変数=箱」「値=データ」「矢印=参照(=どのデータを指しているか)」として表しています。


1. イミュータブル(immutable)とは?

値そのものが変えられないタイプのデータ。
(数値、文字列、タプル など)


例:数値(immutable)の代入

a = 10
b = a
b = 20
Python

図で表すと:

ステップ1:a = 10

 a ──► 10

ステップ2:b = a

 a ──► 10
 b ──┘

(a と b はどちらも 10 を指している)

ステップ3:b = 20(b が別の値を指すように変更される)

 a ──► 10
 b ──► 20

重要ポイント

  • 1020 は変更できない固定の値
  • b = 20 とすると、b は10を離れ、別の20を指す
  • a には影響なし

2. ミュータブル(mutable)とは?

中身を変更できるタイプのデータ。
(リスト、辞書、集合 など)


例:リスト(mutable)の代入

a = [1, 2]
b = a
b.append(3)
Python

図で表すと:

ステップ1:a = [1, 2]

 a ──► [1, 2]

ステップ2:b = a(同じリストを指す)

 a ──► [1, 2]
 b ──┘

ステップ3:b.append(3)(リストの“中身”を変更)

 a ──► [1, 2, 3]
 b ──┘

重要ポイント

  • ab は「同じリスト」を指している(=同じ箱)
  • .append(3) で箱の中身を変えると 両方で見たときに変わる
    → 中身を共有しているため

immutable と mutable の“本質的な違い”を図で比較

【immutable(例:int, str)】

  a ──► 10
  b ──┘

  (b の代入変更)
  b ──► 20      ※ a は変わらない


【mutable(例:list)】

  a ──► [1, 2]
  b ──┘

  (中身の変更)
  [1, 2, 3]  ← 中身が直接変更されるため
  a も b も同じように見える

3. 「コピーしたのに両方変わる」問題が起こる理由

リストをそのまま別の変数に代入すると「参照(矢印)」がコピーされるだけ

 a ──► [1, 2]
 b ──┘

(どちらも同じ中身を見る)

→ ミュータブルなので、片方が変更するともう片方も影響を受ける。


4. ミュータブルの “安全なコピー方法”(図で理解)

b = a.copy()
Python

図:

 a ──► [1, 2]

(コピー後)
 a ──► [1, 2]
 b ──► [1, 2]  ← 別の箱(独立したリスト)

これで 片方を変更しても他方は影響を受けない


5. まとめ — 図で一目で理解するポイント

immutalbe(数値・文字):
    変数が指す場所が変わるだけ。中身は変わらない。

mutable(リスト・辞書):
    中身を変えられるので、複数の変数が同じ箱を指すと影響し合う。
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました