擅长:python、mysql、java
<p>Python可能有一些特定的实现细节,我不知道这些细节与我的一般论点有什么关系,但是:</p>
<ul>
<li><em>创建</em>字符串集可能比创建整数集慢一些(其他条件都相同),因为字符串上的哈希操作需要一些(小)时间来运行,而对整数的哈希操作则很简单。在</li>
<li><em>迭代</em>一个集合不执行任何散列操作,因此散列的时间与此无关。在</li>
<li>迭代一个集合取决于集合中元素的数量以及支持该集合的哈希表中的桶数。因此,散列函数的分布只在它导致哈希表增加bucket计数的情况下才重要。对于一些不可能实现的哈希表(因为bucket count只会在负载因子超过阈值时增加,而不仅仅是因为冲突)。其他哈希表实现在发生大量冲突时调整大小。我不知道哪个是CPython。在</li>
<li>无论如何,您给出的一组整数的特定示例将生成分布良好的哈希值。在</li>
<li>有一种方法可以找出Python中哪个更快,那就是<code>timeit</code>,并给出一个实际的数据示例。投机通常是浪费时间。在</li>
</ul>
<p>您可以看到如下Python哈希算法的结果:</p>
<pre><code>>>> foo = 3
>>> foo.__hash__()
3
>>> foo = 1856348
>>> foo.__hash__()
1856348
>>> foo = "\x00"
>>> foo.__hash__()
1
>>> foo = "\x01"
>>> foo.__hash__()
128000384
>>> foo = "\x02"
>>> foo.__hash__()
256000771
</code></pre>
<p>所以在我的Python副本中,这些散列结果与<a href="http://effbot.org/zone/python-hash.htm" rel="nofollow">reported Python hash algorithms</a>匹配。与CPython一样,您可以查看源代码来确认算法。在</p>