0

重複の可能性:
Python:IDでオブジェクトを取得

私はクエリを持っています、つまり、これを試してみるとPythonで

>>>a=5

>>>id(a)
>>>746363

つまり、IDを取得しています。これはアドレスと同等です。私のクエリは、オブジェクトからIDを取得するのと同じように、IDから値またはオブジェクトを取得する方法があります。

次のように、

 >>>object(746363)

 >>>5

私は私の質問を明確に伝えるために上記のものを書きました

4

1 に答える 1

1

まず第一に、メモリアドレスを返す 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
于 2012-12-08T10:15:35.140 に答える