Pythonの参照渡し

投稿者: | 9月 3, 2022

immutableの変更不可というのは、同じオブジェクト(id)のまま、値だけを変更することはできないという意味。変更時にはidも一緒に変更される。

""" Pythonの場合、イミュータブル(不変体)な整数や文字列であっても"参照渡し"になっているが、整数や文字列のような
    イミュータブルについては、そのままではidを変更できないので、値の定義後に計算などでその値が更新されると新しいidが
    生成されその中に格納される
    """

>>> x = 10 #(int)
>>> id(x)
4303002192

>>> x += 5
>>> x
15
>>> id(x)
4303002352

>>> x = 'a' #(str)
>>> id(x)
4304262320

>>> x = 'a' * 3
>>> x
'aaa'
>>> id(x)
4304390320
  
"""ミュータブルなリストの場合、メソッドや代入文を使って値を変更してもidは変わらない。"""

>>> lst = [1, 3, 5]
>>> lst
[1, 3, 5]
>>> id(lst)
4304378112

>>> lst.append(7)        #メソッドを使って追加
>>> lst
[1, 3, 5, 7]
>>> id(lst)
4304378112

>>> lst += [9]          #代入文をつかって追加
>>> lst
[1, 3, 5, 7, 9]
>>> id(lst)
4304378112

"""リストと同じ、シーケンスデータ型のイミュータブルなtupleに追加した場合。tupleの場合は代入文しかない。
   追加できているが、idは変更されている。
   """

>>> tpl = (1, 3, 5)
>>> id(tpl)
4305086208

>>> tpl += 7,
>>> tpl
(1, 3, 5, 7)

>>> id(tpl)
4305071216