Pythonでは、すべての変数がオブジェクトへの参照になります。オブジェクトは固有のIDを持っており、id()関数でオブジェクトのIDを確認することができます。IDとはオブジェクトの識別子で、オブジェクトがメモリ上で割り当てられたアドレスを指しています。
Pythonのすべてのオブジェクトは「値」、「データ型」、「ID」を持っています。オブジェクトの値を変更できないオブジェクトは不変な(immutable)オブジェクトで、値を変更できるオブジェクトは可変な(mutable)オブジェクトです。
# type()関数でオブジェクトのデータ型を取得できます。
>>> type("hello")
<class 'str'>
>>> type(300)
<class 'int'>
>>> type([1, 2, 3])
<class 'list'>
また、複数の変数が同じオブジェクトを参照することができます。
# list1とlist2は同じオブジェクトを参照するため同じIDを持つ
>>> list1 = [1, 2, 3]
>>> list2 = list1
>>> id(list1)
139669259568960
>>> id(list2)
139669259568960
変数を「値を格納する箱」とたとえることがよくありますが、参照に関してはこのたとえは適切ではないと言えるでしょう。なぜなら、複数の箱は同じオブジェクトを格納できないからです。「箱」の代わりに、「ラベル」とたとえることができます。
以上の情報を踏まえて、Pythonで変数を扱う際には、変数がオブジェクトへの参照であることを理解し、不変なオブジェクトと可変なオブジェクトの違いを理解することが重要です。