>>> a = 2.5
>>> b = 2.5
>>> c = b
>>> a は c
False
>>> a = 2
>>> b = 2
>>> c = b
>>> a is c
True
今日、is関数を使ったときに、aとbをそれぞれ出力しました。値が 2.5 と 2 の場合、
>>> a = 2
>>> b = 2
>>> id(a)
21132060
であることがわかります。 >>> id( b)
21132060
>>> a = 2.5
>>> b = 2.5
>>> id(a)
19622112
>>> id (b)
29321464
a と b が 2 の場合、id は同じですが、2.5 の場合、この状況は文字列、つまり a の場合にも発生します。が非常に短い場合、b には非常に短い値が割り当てられ、その ID 値は同じですが、長い文字列ではありません。
の後には、インタープリタは小さな int と短い文字列を解釈するという単純な結論が得られます。少し最適化を行い、同じ ID を持つようにオブジェクトを 1 つだけ割り当てました。