我正在努力優化程序的運行時間,並且想知道Python在幕後究竟做了什麼「==」。特別是,我注意到它可以檢查兩個大的「相似」對象是否真的很快。例如,如果您有兩個長度爲1000萬的字符串,並且它們只有一個字符的不同,那麼在它們上運行==需要的時間與運行2 == 3的時間相當。Python的「==」真的做了什麼
2
A
回答
6
==
代表左側對象的__eq__
特殊方法,如果有的話。而字符串對象肯定有一個,並且它是高度優化的。所以這就是它的全部...
+0
得到了你。我想到了這一點,但認爲這是不可能的,因爲我用time.time()計算了上述兩種情況,並得到了相同的結果。實際上有一個區別,它只是非常小。我再次測試了它們,這次重複了億次的==操作,得到了2.07秒的差異。我仍然對字符串alg好奇。雖然看起來像比較int alg長度10^7的字符串一樣快。在比較2和3! –
+2
查看第1192行和後面的「Py-2.7.9/Objects/stringobject.c」(當然下載和解壓縮源代碼之後:-),你將在今天的C編譯器和CPU中看到魔術的全部硬件 - 它只是'memcmp',在比較字符串長度和第一個字符後可能發生快速失敗。 –
相關問題
- 1. Python除了真的做什麼?
- 2. r.js真的做了什麼?
- 3. 'moveFailed'真的做了什麼?
- 4. Jetsam真的做了什麼?
- 5. C演員真的做了什麼?
- 6. @ app.call(env)真的做了什麼?
- 7. php unset()它真的做了什麼?
- 8. UDPConn Close真的做了什麼?
- 9. R函數`poly`真的做了什麼?
- 10. python在開始運行時真的做了什麼?
- 11. Python:我做錯了什麼?
- 12. Python:我做錯了什麼
- 13. PHP:pcntl_fork()真的做什麼?
- 14. ifstream :: open()真的做什麼?
- 15. initWithNibName真的做什麼?
- 16. stopLoading()真的在做什麼?
- 17. $ q.defer()真的會做什麼?
- 18. Python的__file__實際上做了什麼?
- 19. Python 2中的`line.decode()`做了什麼?
- 20. Python的內建__build_class__做了什麼?
- 21. Python的struct.pack究竟做了什麼?
- 22. a是一個函數,那麼`a.call.call`真的做了什麼?
- 23. 是@NgTwoWay(「param」)中的參數是否真的做了些什麼?
- 24. this.finish()真的做了什麼?它阻止我的代碼運行?
- 25. RegAsm真的做了什麼?文件在哪裏複製?
- 26. 如何確切知道PowerShell(PS)命令真的做了什麼
- 27. GENERIC_ALL和文件夾/文件ACL? GENERIC_ALL真的做了什麼?
- 28. Angular 2 - trackBy函數,它真的做了什麼?
- 29. Bigquery查詢真的很慢,我做錯了什麼?
- 30. 鑄造 - (基地)o-它真的做了什麼?
事情是字符串在python中是不可變的,所以它可能檢查字符串的id,像這樣str1 == str2與id(str1)== id(str2)相同, ,它不依賴於字符串長度 –
@batiskaf具有相同值的不可變對象不需要具有相同的'id'。也就是說,'s1 =「這是一個測試」; s2 =「這是一個測試」; id(s1)== id(s2)'可以返回False(實際上,它在我的機器上)。 – jme
他們在第一個字符或最後一個字符有所不同嗎? –