2

我有一个 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并将其转换为“真正的”python 对象呢?

4

1 回答 1

4

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

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

CPython 文档id()

id(object)

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

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


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

于 2016-04-14T18:34:31.693 回答