検索したけど以外と見つかりにくかったので、メモのつもりでここに書いておきます。
1. やりたいこと
hoge = "hello world"としてからi = id(hoge)としたとき、i == 1774920137984を得たとします。
ではidの逆関数のようなことはどうやればできるのでしょうか。
例えばidの逆関数をbiとするなら、
bi(1774920137984)が"hello world"を返すようにするにはどうすればいいのでしょうか
2. 答え
警告: このやり方を実行した結果処理系がぶっ壊れても、筆者は責任を取りません
次のようにします。
import ctypes
bi = lambda x ctypes.cast(x, ctypes.py_object).value
print(bi(1774920137984)) # "hello world"
おそらく、これは実行中のpythonがC言語で書かれている場合(ほとんどのpythonがこれらしい)に動作します。
Jython(Javaで書かれたpython)を利用している場合は、他のやり方があるのかもしれません。
また、適当な数字を入れた場合や、変数に格納しなかったオブジェクトのidを入力すると、処理系がフリーズしたのち、勝手に終了しました。
3. 参考