比较简单的Python ctypes数据类型

时间:2019-03-27 20:56:12

标签: python ctypes

>>> ctypes.c_ushort(37099) == ctypes.c_ushort(37099)
False

这些似乎并不相等,因为没有用于PyCSimpleType对象的比较运算符。

有没有理由将其省略?似乎必须使用:

>>> ctypes.c_ushort(37099).value == ctypes.c_ushort(37099).value
True

1 个答案:

答案 0 :(得分:2)

根据ctypes._SimpleCData及其超类ctypes._CData的文档,“所有ctypes类型实例都包含一个存储与C兼容的数据的内存块。”

大概,ctypes.c_ushort(37099)的每次调用都对应一个新的存储块,因此使它们之间的相等性比较为假。该文档还指出,value属性包含对象的实际值。

>>> import ctypes
>>> val1 = ctypes.c_ushort(37099)
>>> val2 = ctypes.c_ushort(37099)
>>> ctypes.addressof(val1)
2193186894992
>>> ctypes.addressof(val2)
2193186895376