如何使用对象检索对象';python中的s id

如何使用对象检索对象';python中的s id,python,memory,Python,Memory,可能重复: 我有一个疑问,就是, 在python中,如果我们尝试这个 >>>a=5 >>>id(a) >>>746363 也就是说我们得到的身份证,相当于地址, 我的疑问是,有没有办法 从id获取值或对象,就像我们从对象获取id一样 就是这样, >>>object(746363) >>>5 我编写上面的代码是为了清晰地传递我的查询首先,返回内存地址的id()是CPython实现细节,Pytho

可能重复:

我有一个疑问,就是, 在python中,如果我们尝试这个

>>>a=5

>>>id(a)
>>>746363
也就是说我们得到的身份证,相当于地址, 我的疑问是,有没有办法 从id获取值或对象,就像我们从对象获取id一样

就是这样,

 >>>object(746363)

 >>>5
我编写上面的代码是为了清晰地传递我的查询

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

Python不公开任何“好的”API来实现这一点,但您可以使用ctypes模块访问任何内存点。 示例来自:


你真的,真的确定你需要这个吗?你到底想做什么?是的,我需要这个,在我的项目中。这是在我考虑共享内存时出现的。你不需要这个,python已经有了使用共享内存的方法。再次阅读有关多处理的文档。@usernaveen这就是我的意思,您试图解决多处理模块中已经解决的问题;此外,您的方法在现代操作系统中也无法工作:由
id
返回的“内存地址”当然是进程虚拟地址空间中的一个地址,它与ram中的实际物理地址无关(顺便说一句,在进程没有注意到的情况下,它可以由于分页等而改变)。即使您拥有实际的物理地址并将页面锁定在内存中,这样它就不会交换,您也无法从用户空间代码访问它,只有内核可以。是的,我知道内置模块,但我在这里使用twisted,因为据我所知,非阻塞内置多处理模块是不够的,所以我在寻找一些东西。
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