検索したけど以外と見つかりにくかったので、メモのつもりでここに書いておきます。
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. 参考