以下では、できるだけ直感的に理解できるように、図(イメージ)を使って
ミュータブル(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
重要ポイント
10や20は変更できない固定の値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 ──┘
重要ポイント
aとbは「同じリスト」を指している(=同じ箱).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(リスト・辞書):
中身を変えられるので、複数の変数が同じ箱を指すと影響し合う。
