首页 / PYTHON / python – 设置与冻结性能
python – 设置与冻结性能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 设置与冻结性能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2070字,纯文字阅读大概需要3分钟。
内容图文
![python – 设置与冻结性能](/upload/InfoBanner/zyjiaocheng/706/a485067128aa4b5d9f608b73cf8e187c.jpg)
我正在修补Python的set和frozenset集合类型.
最初,我假设freezeset将提供比set更好的查找性能,因为它是不可变的,因此可以利用存储项的结构.
但是,对于以下实验,情况似乎并非如此:
import random
import time
import sys
def main(n):
numbers = []
for _ in xrange(n):
numbers.append(random.randint(0, sys.maxint))
set_ = set(numbers)
frozenset_ = frozenset(set_)
start = time.time()
for number in numbers:
number in set_
set_duration = time.time() - start
start = time.time()
for number in numbers:
number in frozenset_
frozenset_duration = time.time() - start
print "set : %.3f" % set_duration
print "frozenset: %.3f" % frozenset_duration
if __name__ == "__main__":
n = int(sys.argv[1])
main(n)
我使用CPython和PyPy执行了这段代码,结果如下:
> pypy set.py 100000000
set : 6.156
frozenset: 6.166
> python set.py 100000000
set : 16.824
frozenset: 17.248
在CPython和PyPy中,对于查找性能来说,冷冻集实际上似乎较慢.有人知道为什么会这样吗?我没有查看实现.
解决方法:
冻结集和集合实现在很大程度上是共享的; set只是一个添加了变异方法的冻结集,具有完全相同的散列表实现.见Objects/setobject.c source file;顶级PyFrozenSet_Type definition股票与PySet_Type definition共同运作.
这里没有对冻结集进行优化,因为在测试成员资格时无需计算冻结集中项目的哈希值.您用来测试集合的项目仍需要计算其哈希值,以便在集合哈希表中找到正确的槽位,以便您可以进行相等性测试.
因此,由于系统上运行的其他进程,您的计时结果可能已关闭;你测量了挂钟时间,并没有禁用Python垃圾收集,也没有反复测试同样的事情.
尝试使用timeit module运行测试,其中一个值来自数字,一个不在集合中:
import random
import sys
import timeit
numbers = [random.randrange(sys.maxsize) for _ in range(10000)]
set_ = set(numbers)
fset = frozenset(numbers)
present = random.choice(numbers)
notpresent = -1
test = 'present in s; notpresent in s'
settime = timeit.timeit(
test,
'from __main__ import set_ as s, present, notpresent')
fsettime = timeit.timeit(
test,
'from __main__ import fset as s, present, notpresent')
print('set : {:.3f} seconds'.format(settime))
print('frozenset: {:.3f} seconds'.format(fsettime))
这重复每次测试100万次并产生:
set : 0.050 seconds
frozenset: 0.050 seconds
内容总结
以上是互联网集市为您收集整理的python – 设置与冻结性能全部内容,希望文章能够帮你解决python – 设置与冻结性能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。