python连等号_Python比较2列表和2元组用等号
好吧,你的一些困惑是,你正在閱讀的博客文章是錯的。關于多件事。試著忘記你曾經讀過它(除了記住網站和作者的名字,以便你以后知道如何避免它們。)
確實,元組是可以清除的,列表不是,但這與它們的相等測試功能無關。并且它確實不正確#34;它只是比較哈希值,它知道它們是否相等!"哈希碰撞發生,忽略它們會導致可怕的錯誤,幸運的是,Python的開發人員并不是那么愚蠢。事實上,Python在初始化時計算哈希值是不正確的。*
實際上是元組和列表之間的一個顯著差異(在CPython中,從3.6開始),但它通常沒有太大區別:列表對不等長度進行額外檢查作為優化的開始,但同樣的檢查結果是元組的悲觀,**所以它從那里被刪除。
另一個,通常更為重要的區別是,源中的元組文字被編譯為常量值,同一元組文字的單獨副本被折疊到同一個常量對象中;由于顯而易見的原因,列表不會發生這種情況。
事實上,這就是您使用timeit進行真正測試的內容。在我的筆記本電腦上,比較元組需要95ns,而比較列表需要169ns - 但是將其分解,實際上比較為93ns,另外還有38ns來創建每個列表。為了使其公平比較,您必須將創建移動到設置步驟,然后比較循環內已存在的值。 (或者,當然,你可能不希望公平 - 你發現了一個有用的事實,即你每次使用元組常量而不是創建一個新列表時,你都會這樣做節省了相當大的一微秒。)
除此之外,他們基本上做同樣的事情。將the C source轉換為類似Python的偽代碼(并刪除所有錯誤處理,以及使<使相同功能起作用的內容,等等):
for i in range(min(len(v), len(w))):
if v[i] != w[i]:
break
else:
return len(v) == len(w)
return False
if len(v) != len(w):
return False
for i in range(min(len(v), len(w))):
if v[i] != w[i]:
break
else:
return True
return False
*事實上,與字符串不同,元組甚至不會緩存它們的哈希值;如果你反復撥打hash,它會繼續重新計算它。請參閱issue 9685,其中一個要更改的修補程序被拒絕,因為它減慢了某些基準測試并且沒有加速任何人都能找到的任何內容。
**不是因為實現有任何固有的東西,而是因為人們經常比較不同長度的列表,但很少使用元組。
總結
以上是生活随笔為你收集整理的python连等号_Python比较2列表和2元组用等号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: quercus mysql_让PHP运行
- 下一篇: linux可平通网关但不能上网,redh