反转元组和反转列表将返回不同类型的对象:
>>> reversed((1,2))
<reversed at 0x7fffe802f748>
>>> reversed([1,2])
<list_reverseiterator at 0x7fffebdd4400>
它们具有相同的
dir
。两种类型都不是另一种的子类。这是为什么?一个人能做什么而另一个人不能做?
最佳答案
基本上,列表实现__reversed__
方法并返回一个专门的对象,而tuple
则退回到reversed
的默认实现以用于任何序列:
>>> list.__reversed__
<method '__reversed__' of 'list' objects>
>>> tuple.__reversed__
AttributeError: type object 'tuple' has no attribute '__reversed__'
现在,为什么必须在列表对象本身的源代码中找到list并非默认为序列
reversed
对象的原因-可能它可以通过直接访问一些内部list
属性来启用一些优化。实际上看一下C代码,几乎没有什么区别,当然也没有什么值得关注的-
我敢说特殊列表
__reversed__
的实现是Python2天的剩余时间,在那里reversed
实际上会将任何其他Python序列复制到list
-因此,其他序列也没有特殊情况(以及它们何时实现)是没有意义的一般的enumreverse
,对于元组就足够了)。我非常确定,如果只是简单地注释掉
__reversed__
上的listobject.c
插槽,Python及其列表将像什么都没有发生一样工作,默认为reversed
。关于python - 元组和列表反向之间有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40165800/