比较Python中的性能:相等与不相等

时间:2014-06-12 20:51:22

标签: python performance comparison equals

在比较任何变量时,可以选择比较平等与比较不平等。对于具有一个元素的变量,不是字符串/ list / tuple / etc ... ,差异可能不存在或可忽略不计。

问题: 比较两个多元素变量时,检查它们是否比它们不相等更慢或更快。

我的直觉告诉我,比较他们是否不平等应该更快。我很好奇是否有人可以告诉我这是否属实,以及对于哪种类型的多元素类型都是如此。

注意 :我看过了,并且没有找到任何回答我问题的帖子。这可能是显而易见的,但我希望得到更多的意见,而不仅仅是我自己的意见。

3 个答案:

答案 0 :(得分:3)

您可以随时查看:

>>> timeit("{'a': 1, 'b': 2} == {'a': 2, 'b': 1}")
0.29072967777517983
>>> timeit("{'a': 1, 'b': 2} != {'a': 2, 'b': 1}")
0.2906114293159803

差异似乎可以忽略不计......或许是另一个测试案例?

>>> timeit("range(30) == range(35)")
0.7179841181163837
>>> timeit("range(30) != range(35)")
0.725536848004765

再次,可以忽略不计。

>>> timeit("a == b", "a = {'a': 1, 'b': 2}; b = {'a': 2, 'b': 1}")
0.06806470555693522
>>> timeit("a != b", "a = {'a': 1, 'b': 2}; b = {'a': 2, 'b': 1}")
0.06724365965146717

随着对象的创建而移出。不可否认,小的例子,但我仍然认为,当它们明显不同时,两者都会使用短路。

答案 1 :(得分:1)

我认为它与object.__eq__()object.__ne__直接相关。

当您使用==(等于)或!=(不相等)时启动此方法,并且在要比较的对象的功能中,它可能更快或更慢,具体取决于方法的方式写入。

请参阅官方文档中的Datamodel Basic customization

答案 2 :(得分:-2)

我对某些Cortex M3程序集(或至少我的教授说它是什么)的经验是,当你检查相等或不相等时,有一个比较命令设置3位,并且一个if语句(如果你可以称之为),它会查看特定的语句。基本上你比较AB,3位是更小,等于和更大,然后当你检查任何东西它应该是检查它是更大还是更小(2检查,所以2个周期)对于不相等,或将NOT应用于等号,这取决于体系结构可能是2个不同的动作或单个循环。因此我推测它依赖于编译器,汇编器和CPU的架构。

然而,这应该意味着你可以制作两个程序,每个程序进行大量的此类检查,并为执行计划时间,其中巨大的数量将达到成千上万(根据C / C ++中的执行时间来判断)。在我看来,这是一个相当可行的任务,可以手动定时,这样你就不会对定时器造成混乱,并且由于定时器在许多语言中具有一些特殊性,它们甚至可能无法捕获执行时间单一陈述。或者你可以计算巨大的循环,看看计算机说的是什么。

请记住,如果你在不等的循环中得到1.1倍的时间,这并不意味着不等式需要1.1倍的相等检查时间,因为循环周期要大得多,它可能是2倍时间。对于每个循环使用更多检查的更多测试,应该非常容易确定循环所花费的时间和检查所花费的时间。希望这会有所帮助。