Python 如何比较memoryview对象?

Python 如何比较memoryview对象?,python,memoryview,Python,Memoryview,有人对下面的代码有什么想法吗 >>> memoryview("abc") < memoryview("bca") True >>> memoryview("abc") > memoryview("bca") True >>> memoryview("abc") = memoryview("bca") False >>>记忆视图(“abc”)>>memoryview(“abc”)>memoryview(“bca”) 真的 >>>m

有人对下面的代码有什么想法吗

>>> memoryview("abc") < memoryview("bca")
True
>>> memoryview("abc") > memoryview("bca")
True
>>> memoryview("abc") = memoryview("bca")
False
>>>记忆视图(“abc”)>>memoryview(“abc”)>memoryview(“bca”)
真的
>>>memoryview(“abc”)=memoryview(“bca”)
假的
我如何比较memoryview对象的字符串而不使用
tobytes
来获取字符串的副本呢?

memoryview()
对象不定义任何顺序,它是
\uUlt\uU
方法返回
未实现的
单例,表明它们不支持顺序:

>>> memoryview("abc").__lt__(memoryview('bca'))
NotImplemented
>>> memoryview("abc").__gt__(memoryview('bca'))
NotImplemented
因此,Python2使用内部一致的顺序对这些进行排序。在Python3中,当您尝试使用
运算符时,将引发
TypeError

在Python2中,当对象不支持排序时,它们将按其内存地址排序(对于对象本身,而不是memoryview指向的“内存”);有关发生的情况的更多详细信息,请参阅

仅支持平等性和不平等性测试:

>>> memoryview("abc").__eq__(memoryview('bca'))
False
>>> memoryview("abc").__eq__(memoryview('abc'))
True
>>> memoryview("abc").__ne__(memoryview('abc'))
False
>>> memoryview("abc").__ne__(memoryview('bca'))
True

您唯一的选择是在2.x中使用
.tobytes()
.tolist()

,因为它们是它返回到的同一类型(object.c,
default\u 3way\u compare
,v2.7.3)。使用临时对象在顺序语句中执行比较操作会导致每次运行时交换地址。因此,如果你重复相同的LT或GT测试,结果会在真与假之间交替。@eryksun:我已经指出了我以前关于这个问题的答案,满意吗?:-)促使我发表评论的主要是“Python2为此类操作返回False”这一行。虽然我也发现了
PyObject\u Malloc
中的交替地址分配有点有趣,但它使背对背的LT/GT测试都返回True。@eryksun:对,那一行确实错了。更正。是的,那里的地址重用很有趣。