[英]Comparing Performance in Python: equal versus non equal
在比較任何變量時,可以選擇比較平等與比較不平等。 對於具有一個元素的變量, 而不是字符串/ list / tuple / etc ... ,差異可能不存在或可忽略不計。
問題:當比較兩個多元素變量時,檢查它們是否比它們是否相等更慢或更快。
我的直覺告訴我,比較他們是否不平等應該更快。 我很好奇是否有人可以告訴我這是否屬實,以及對於哪種類型的多元素類型都是如此。
注意 :我看過了,但在這里找不到任何能回答我問題的帖子。 這可能是顯而易見的,但我希望得到更多的意見,而不僅僅是我自己的意見。
你可以隨時檢查:
>>> 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
隨着對象的創建搬走了。 不可否認的是,小的例子,但我仍然認為,當它們變得明顯不同時,它們都會在適當時使用短路。
我認為它與object.__eq__()
和object.__ne__
直接相關。
當您使用==
(等於)或!=
(非等於)時啟動此方法,並且在要比較的對象的函數中,它可能更快或更慢,具體取決於方法的編寫方式。
請參閱官方文檔中的Datamodel Basic自定義 。
我對一些Cortex M3程序集(或至少我的教授說它就是這樣)的經驗是,當你檢查相等或不相等時,有一個比較命令設置3位,一個if語句(如果可以的話)稱之為),它看着一個特定的。 基本上你比較A
和B
,3比特是更小,等於和更大,然后當你檢查任何東西它應該是檢查它是更大還是更小(2個檢查,所以2個周期)的不相等,或應用不是等於標志,取決於架構可能是2個不同的動作或單個循環。 因此我推測它取決於編譯器,匯編器和CPU的架構。
然而,這應該意味着你可以制作兩個程序,每個程序進行大量的此類檢查,並為執行計時,其中巨大的數量將達到成千上萬(通過C / C ++中的執行時間來判斷)。 在我看來,這是一個相當可行的任務,可以手動定時,因此你不會弄亂定時器,並且由於定時器在許多語言中具有一些特殊性,它們甚至可能無法捕獲單個執行時間聲明。 或者你可以計時巨大的循環,看看計算機說的是什么。
但請記住,如果在非等效循環中獲得1.1倍的時間,這並不意味着不等式需要1.1倍的相等檢查時間,因為循環具有更大的周期,它可能是時間的2倍。 對於每個循環使用更多檢查的更多測試,應該非常容易確定循環所花費的時間和檢查所花費的時間。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.