蔵風人

If you try it, it will be somehow & Simple is Best!


[ 最終更新日: 2026-06-14 21:37 閲覧回数: 8回 ]

今日の発見〜ミュータブルな値は代入先の値に影響する

いきなりの問題

以下のdata1 data2の値は?

data1 = [10, 20, 30]
data2 = data1
data1[1] = 40

答えはdata1 data2とも [10, 40, 30]です。

ミュータブルのリストの値の変更は、他のリストに影響する

>>>data1 = [10, 20, 30]
>>>data2 = data1
>>>print(data2)
[10, 20, 30]   # この時点では data2 = [10, 20, 30]
>>> data1[1] = 40
>>> print (data1,data2)
[10, 40, 30] [10, 40, 30]

数学では同じことをやっても x = 20 y =10 のままだ。

x = 10
y = x
x = 20 厳密にはこの x は前の x と同値だが、異なるメモリに格納されたものと考えられる。 
>>> x = 10
>>> print(id(x))
140653654485584  #同じ x でも 最初と最後の x の id は異なる 
>>> y = x
>>> x = 20
>>> print(id(x),x,id(y),y)
140653654485904 20 140653654485584 10

x, y ともに int 型だからイミュータブルで変更ができないので、他の代入先には影響しない

ミュータブルなリスト data1 の場合は data1 が書き換えられることによって、同じくミュータブルな data2 が書き換えられています。

ミュータブルでないタプルの場合はどうか

>>> data1 = [10, 20, 30]
>>> data2=tuple(data1)
>>> data1[1]=40
>>> print(data1,data2)
[10, 40, 30] (10, 20, 30)

ミュータブルのリストの変更も、タプルに変換された data2 には影響していません。

まとめ

ミュータブル・イミュータブルについて