哈希冻结集合与排序元组的比较

5 投票
1 回答
2287 浏览
提问于 2025-04-17 13:43

在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 占用的 内存 更多,这一点可以在 这里 看到。

在查找时间上,frozensettuple 之间的差别非常小,更多信息可以在 这里 找到。

撰写回答