我有一个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对象?
答案 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的引用计数