访问 python 对象指针数据

accessing python object pointer data

我有一个 python set,其中包含我要处理的具有统一类型的不可散列 python 对象的集合。

为了提高算法的效率,我想使用 ctypes 与仅接受 uint64 作为数据值的外部索引实现进行交互。

我希望我可以将对 python 对象的指针引用作为 uint64?

传递到这个外部库中

我试过 ctypes.cast(ctypes.py_object(my_python_object), ctypes.c_uint64) 但我得到 ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type

此外,反过来如何,获取对 python 对象的引用作为 uint64 并将其转换为 "real" python 对象?

为什么不简单地使用 CPython 中的 id() 函数?

>>> x
<object object at 0x7fd2fc742090>
>>> hex(id(x))
'0x7fd2fc742090'

CPython documentation of id() 表示

id(object)

Return the “identity” of an object. This is an integer which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the same id() value.

CPython implementation detail: This is the address of the object in memory.


如果要将您的 uint64_t“转换”回 Python 对象,您还需要弄乱引用计数等。据我所知,ctypes不要轻易让一个increase/decrease的引用计数达到Python