重複の可能性:
Python:IDでオブジェクトを取得
私はクエリを持っています、つまり、これを試してみるとPythonで
>>>a=5
>>>id(a)
>>>746363
つまり、IDを取得しています。これはアドレスと同等です。私のクエリは、オブジェクトからIDを取得するのと同じように、IDから値またはオブジェクトを取得する方法があります。
次のように、
>>>object(746363)
>>>5
私は私の質問を明確に伝えるために上記のものを書きました
重複の可能性:
Python:IDでオブジェクトを取得
私はクエリを持っています、つまり、これを試してみるとPythonで
>>>a=5
>>>id(a)
>>>746363
つまり、IDを取得しています。これはアドレスと同等です。私のクエリは、オブジェクトからIDを取得するのと同じように、IDから値またはオブジェクトを取得する方法があります。
次のように、
>>>object(746363)
>>>5
私は私の質問を明確に伝えるために上記のものを書きました
まず第一に、メモリアドレスを返す id() は CPython 実装の詳細であり、Python はこの方法で動作し続けるという保証を提供しません。したがって、それを再考し、より Pythonic なアプローチを模索する必要があります。
Python はこれを行うための「適切な」API を公開していませんが、ctypes モジュールを使用して任意のメモリ ポイントにアクセスできます。このページの例:
import ctypes
class PyTypeObject(ctypes.Structure):
_fields_ = ("ob_refcnt", ctypes.c_int), ("ob_type", ctypes.c_void_p), \
("ob_size", ctypes.c_int), ("tp_name", ctypes.c_char_p)
class PyObject(ctypes.Structure):
_fields_ = ("ob_refcnt", ctypes.c_int), ("ob_type", ctypes.POINTER(PyTypeObject))
PyObjectPtr = ctypes.POINTER(PyObject)
print ctypes.cast(id("test"), PyObjectPtr).contents.ob_type.contents.tp_name