【发布时间】:2017-06-21 18:08:30
【问题描述】:
“要避免的一个问题是确保你这样做:key in some_dict 而不是 key in some_dict.keys()。两者在语义上是等效的,但在性能方面后者要慢得多(O(n) vs O(1 ))。我看到人们使用in dict.keys() 认为它更明确,因此更好。”
我在网上找到了这条建议。谁能解释并证明上述性能差异?这两个看似相似的语句的工作原理有何不同?
编辑:更准确地说,如何在字典中建立索引比在列表中建立索引更快?据我所知,哈希表是链表的数组。数组是键的数组。因此,在哈希表中查找键应该类似于在键列表中查找该键。 (?)
【问题讨论】:
-
你熟悉hash tables的理论吗?
-
@PM2Ring 我确实在 C 中实现了它。所以我会说是的,我熟悉数据结构。我错过了什么明显的东西吗?
-
您应该阅读 Laurent Luce 关于Python dictionary implementation 的这篇文章。
dict对象的确切实现在 Python 3.6 中发生了变化,但散列过程仍然非常相似,AFAIK。由于您可以读写 C,因此查看dictobject.c 源代码可能会有所帮助。 -
This answer by Jim Fasarakis-Hilliard 简要解释了新的 Python 3.6 字典。
标签: python performance