有人能告诉我Python中set和dict的内部实现有什么不同吗?它们在后台使用相同的数据结构吗?
++ 理论上,可以使用字典(dict)来实现集合(set)的功能。
有人能告诉我Python中set和dict的内部实现有什么不同吗?它们在后台使用相同的数据结构吗?
++ 理论上,可以使用字典(dict)来实现集合(set)的功能。
在CPython中,集合和字典使用相同的基本数据结构。集合稍微调整了一下,但基本上就像字典一样是散列表。
你可以查看C代码中的实现细节:setobject.c
和 dictobject.c
;这两个实现非常接近;setobject.c
的实现最初是 dictobject.c
的副本。 dictobject.c
有更多的实现注释和跟踪调用,但核心函数的实际实现仅在细节上有所不同。
最明显的区别是,哈希表中的键不用于引用值,而是像在字典中一样,因此setentry
结构体只有缓存哈希和键,dictentry
结构体 添加了值指针。
在内置的 set
之前,我们有sets
模块,一个使用 dict
对象来跟踪集合值作为键的纯 Python 实现。在 sets
模块可用之前的 Python 版本中,我们就是这样做的:使用具有键作为 set 值的 dict
对象来跟踪唯一、无序的值。
这两个在后端使用相同的数据结构。例如,在集合中,您不能存储重复的值,但在字典中,您可以存储多个相同的值,并且可以通过更改字典的行为将其转换为集合。