質問: id(b)) # True!? ``` 変数`a`と`b`はメモリ上では明らかに異なる番地に作成されているはずです。 id関数は実際のところ、一体何を指しているのでしょうか。 よろしくお願い致します。
回答: CPythonは一部のimmutableなオブジェクトをキャッシュします。 これは公式に文書化された動作ではなく、実装依存の最適化です。 > > 小さな整数と短い文字列はキャッシュされます。 > > > ライブラリと拡張 FAQ — Python 3.7.3 ドキュメント > > > ですから、値によってそうなったりそうならなかったりします。 ``` >>> a = 10**100 >>> b = 10**100 >>> id(a) == id(b) False ``` CPythonで`id`がオブジェクトのメモリ番地を返すことは間違いありません。ただし、それを知ってもPythonを書く上ではほとんど役には立たないでしょう。