深入理解Python的set和dict(不涉及源码分析,想看源码分析的可以关闭了,源码分析后期会出)
集合( set )和字典( dict )的内部原理 Python 的 dict 和 set 构建在哈希表之上。这篇文章解释了哈希表的使用如何造成这些容器类型的优点和局限性。 以下是本文回答的一些问题: Python dict 和 set 的效率如何? 为什么集合元素是无序的? 为什么我们不能使用任何 Python 对象作为 dict 键或 set 元素? 为什么字典键的顺序取决于插入顺序 本文内容: 性能试验 哈希和相等 哈希表 哈希算法 集合工作原理造成的实际影响 Dict 中哈希表的使用 Key 共享字典 紧凑的 dict 如何节省空间并保持排序 dict 工作原理造成的实际影响 注意: 您无需了解所有这些细节即可充分利用字典和集合。但这两个结构的实现想法很美好 —— 这就是我描述它们的原因。如需实用建议,您可以跳至 “ 集合的工作原理造成的实际影响 ” 和 “ 字典的工作原理造成的实际影响 ” 章节。 为了激发对哈希表的研究,我们首先通过涉及数百万个项目的简单测试来展示 dict 和 set 的惊人性能。 性能试验 根据经验,所有 Pythonista 都知道字典和集合速度很快。我们将通过对照实验来证实这一点。 为了了解 dict 、 set 或 list 的大小如何影响使用 in 运算符的搜索性能,我生成了一个包含 1000 万个不同双精度浮点数的数组,即 “ 干草堆( haystack ) ” 。然后我生成了一组针:即 1,000 个浮点数,其中 500 个是从干草堆中挑选出来的, 500 个已验证不在其中。 对于 dict 基准测试,我使用 dict.fromkeys() 创建一个名为 haystack 的包含 1,000 个浮点数的字典。这是 dict 测试的设置。我使用 timeit 模块计时的实际代码是示例 1 (如 [ex_set...