Python集合和字典的"内部"区别
有没有人能告诉我,Python里面的集合(set)和字典(dict)在内部实现上有什么不同?它们在后台使用的是同样的数据结构吗?
++ 理论上来说,字典可以用来实现集合的功能。
2 个回答
-2
这两者在后台使用的是相同的数据结构。比如在集合(sets)中,你不能存储重复的值,而在字典(dict)中,你可以存储多个相同的值。你还可以通过改变字典的行为,把字典转换成集合。
11
在CPython中,集合(sets)和字典(dicts)使用的是相同的基本数据结构。集合对这个结构进行了稍微不同的调整,但本质上它们都是哈希表,就像字典一样。
如果你想了解具体的实现细节,可以查看C语言的代码:setobject.c
和 dictobject.c
; 这两个实现非常相似,setobject.c
最初是从 dictobject.c
复制过来的。虽然 dictobject.c
有更多的实现说明和调试调用,但核心功能的实现其实只是在细节上有所不同。
最明显的区别是,在哈希表中,键并不是用来引用值的,像字典那样。因此,setentry
结构 只有一个缓存的哈希值和键,而 dictentry
结构 则多了一个指向值的指针。
在我们有内置的 set
之前,曾经有一个 sets
模块,这是一个纯Python实现,它使用 dict
对象来将集合的值作为键来跟踪。而在 sets
模块出现之前的Python版本中,我们确实是这样做的:使用 dict
对象,将集合的值作为键来跟踪唯一且无序的值。