可能重复:
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