访问python对象指针数据

时间:2016-04-14 18:29:43

标签: python pointers ctypes pyobject

我有一个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并将其转换为&#34; real&#34; python对象?

1 个答案:

答案 0 :(得分:4)

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

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

CPython documentation of id()

  

id(object)

     

返回对象的“标识”。这是一个整数,在该生命周期内保证该对象是唯一且恒定的。具有非重叠生存期的两个对象可能具有相同的id()值。

     

CPython实现细节:这是内存中对象的地址。

如果您要将此uint64_t“转换”回Python对象,您还需要弄乱引用计数等。据我所知,ctypes不容易让人增加/减少Python的引用计数