Python中set和dict的“内部”区别是什么?

4

有人能告诉我Python中set和dict的内部实现有什么不同吗?它们在后台使用相同的数据结构吗?

++ 理论上,可以使用字典(dict)来实现集合(set)的功能。

2个回答

11

在CPython中,集合和字典使用相同的基本数据结构。集合稍微调整了一下,但基本上就像字典一样是散列表。

你可以查看C代码中的实现细节:setobject.cdictobject.c;这两个实现非常接近;setobject.c 的实现最初是 dictobject.c 的副本。 dictobject.c 有更多的实现注释和跟踪调用,但核心函数的实际实现仅在细节上有所不同。

最明显的区别是,哈希表中的键不用于引用值,而是像在字典中一样,因此setentry 结构体只有缓存哈希和键,dictentry 结构体 添加了值指针。

在内置的 set 之前,我们有sets 模块,一个使用 dict 对象来跟踪集合值作为键的纯 Python 实现。在 sets 模块可用之前的 Python 版本中,我们就是这样做的:使用具有键作为 set 值的 dict 对象来跟踪唯一、无序的值。


-2

这两个在后端使用相同的数据结构。例如,在集合中,您不能存储重复的值,但在字典中,您可以存储多个相同的值,并且可以通过更改字典的行为将其转换为集合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接