3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pythonのid関数の逆関数(idからオブジェクトを取得)

Last updated at Posted at 2020-11-26

検索したけど以外と見つかりにくかったので、メモのつもりでここに書いておきます。

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. 参考

3
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?