的
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)