如何在python中使用它的id来检索对象

时间:2012-12-08 09:58:06

标签: python memory

  

可能重复:
  Python: Get object by id

我有一个查询,即 在python中,如果我们尝试这个

>>>a=5

>>>id(a)
>>>746363

我们正在获取id,它相当于地址, 我的疑问是,有任何方法 从id中获取值或对象,就像我们从对象中获取id

一样

如下所示,

 >>>object(746363)

 >>>5

我写了上面的内容以清楚地传达我的问题

1 个答案:

答案 0 :(得分:1)

首先,返回内存地址的id()是CPython实现细节,Python不保证它会继续以这种方式工作。所以你应该重新考虑它并寻求更多的pythonic方法。

Python没有公开任何“好”API来执行此操作,但您可以使用ctypes模块访问任何内存点。 this page的示例:

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