设置与冻结设置性能

设置与冻结设置性能,第1张

设置与冻结设置性能

frozenset
set
实现在很大程度上共享; a
set
只是一个
frozenset
添加了变异方法的a
,具有完全相同的哈希表实现。参见
Objects/setobject.c
源文件;
顶级
PyFrozenSet_Type
高清股与功能的
PySet_Type
定义。

这里没有针对冻结集的优化,因为

frozenset
测试成员资格时无需计算项目 的哈希值。用于
集合进行测试的项目仍需要计算其哈希值,以便在集合哈希表中找到正确的插槽,以便进行相等性测试。

因此,您的计时结果可能由于系统上正在运行其他进程而无法使用。您测量了时钟时间,没有禁用Python垃圾收集,也没有重复测试同一件事。

尝试使用

timeit
模块运行测试,其中一个来自
numbers
,一个不在集合中:

import randomimport sysimport timeitnumbers = [random.randrange(sys.maxsize) for _ in range(10000)]set_ = set(numbers)fset = frozenset(numbers)present = random.choice(numbers)notpresent = -1test = '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))

这将每个测试重复一百万次,并产生:

set      : 0.050 secondsfrozenset: 0.050 seconds


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5654608.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存