哈希冻结集合与排序元组的比较
在Python中,假设你有一组可以比较和可以哈希的元素s
,那么用frozenset(s)
来哈希,还是用tuple(sorted(s))
来哈希,哪个更好呢?
1 个回答
4
这要看你在做什么。如果你要创建一个 frozenset()
,那比对一个 tuple
进行排序要快,但 frozenset
占用的内存比 tuple
多。
创建 frozenset
的速度比创建 tuple
快:
import timeit
import random as rn
x = range(2000)
rn.shuffle(x)
x = tuple(x)
def get_frozen_set(x):
return frozenset(x)
def get_sorted_tuple(x):
return sorted(x)
n = 10000
t1 = timeit.timeit('get_frozen_set(x)', 'from __main__ import x, get_frozen_set', number = n)
print 'create a frozenset:', t1
t2 = timeit.timeit('get_sorted_tuple(x)','from __main__ import x, get_sorted_tuple', number = n)
print 'sort tuple:', t2
结果:
create a frozenset: 0.85803164112
sort tuple: 6.65848886198
虽然对于短的 tuple
来说,速度差别不大,但当 n = 20
时,差别就会明显一些。
结果:
create a frozenset: 0.0124568308591
sort tuple: 0.0257906431368
frozenset
占用的 内存
更多,这一点可以在 这里 看到。
在查找时间上,frozenset
和 tuple
之间的差别非常小,更多信息可以在 这里 找到。