您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么hash()在python3.4和python2.7下比较慢

5b51 2022/1/14 8:21:54 python 字数 3217 阅读 524 来源 www.jb51.cc/python

我正在使用timeit进行一些性能评估,并发现python 2.7.10和python 3.4.3之间的性能降级.我把它缩小到hash()函数:python 2.7.10:>>> import timeit >>> timeit.timeit('for x in xrange(100): hash(x)', number=

概述

我正在使用timeit进行一些性能评估,并发现python 2.7.10和python 3.4.3之间的性能降级.我把它缩小到hash()函数

python 2.7.10:

>>> import timeit
>>> timeit.timeit('for x in xrange(100): hash(x)',number=100000)
0.4529099464416504
>>> timeit.timeit('hash(1000)')
0.044638872146606445

python 3.4.3:

>>> import timeit
>>> timeit.timeit('for x in range(100): hash(x)',number=100000)
0.6459149940637872
>>> timeit.timeit('hash(1000)')
0.07708719989750534

那是一个约.降低40%!整数,浮点数,字符串(unicodes或bytearrays)等是否被散列似乎并不重要;退化大致相同.在这两种情况下,哈希都返回64位整数.以上是在我的Mac上运行,并在Ubuntu盒子上得到了较小的降级(20%).

我也在python2.7测试中使用PYTHONHASHSEED = random,在某些情况下,为每个“case”重新启动python,我看到hash()性能变得更糟,但从未像python3.4那样慢

谁知道这里发生了什么?是否为python3选择了更安全但更慢的哈希函数

>收养SipHash
>认启用哈希随机

参考文献:

>从Python 3.4起,它使用SipHash作为散列函数.阅读:Python adopts SipHash
>自从Python 3.3哈希随机认启用.参考:object.__hash__(本节最后一行).将值0指定为PYTHONHASHSEED将禁用散列随机化.

总结

以上是编程之家为你收集整理的为什么hash()在python3.4和python2.7下比较慢全部内容,希望文章能够帮你解决为什么hash()在python3.4和python2.7下比较慢所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶