在网上找不到详细信息,当比较两个冻结集时,Python 是否会迭代其中一个集合中的元素,或者是否检查冻结集的哈希值,因为冻结集是可哈希的?
由于参考文档对此没有任何说明,因此它依赖于实现,因此除了查看您正在使用的 Python 版本的源代码(在您的 CPython 发行版中)之外,没有任何答案。Objects/setobject.c
)。查看 Python 3.7.0 的源代码,答案是“也许”;-)
平等首先检查冻结集是否具有相同的大小(len()
)。如果不是,它们就不能相等,所以False
立即返回。
否则比较哈希码如果它们已经被计算过。如果它们已经被计算过,那么False
如果哈希码不相等,则立即返回。否则,将调用逐个元素的代码来检查一个元素是否是另一个元素的子集。
计算冻结集的哈希码不仅仅是为了它——这将是一项可能无法获得回报的费用。所以必须有什么东西来强迫它。 freezesets 一开始的主要用例是允许集合集合,并且在that上下文哈希码将作为将冻结集添加到包含集的正常部分来计算。 C 级集实现包含一个槽,用于在计算哈希值时记录哈希值,该槽初始化为 -1(一个保留值,表示内部“没有已知的哈希码”)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)