有谁能告诉我set和dict在python中的内部实现有什么不同吗?他们在后台使用相同的数据结构吗?
++理论上,可以使用dict来实现set功能。
最佳答案
在CPython中,集合和dict使用相同的基本数据结构。set对它的调整略有不同,但它基本上是一个散列表,就像字典一样。
您可以查看C代码中的实现细节:setobject.c
和dictobject.c
;实现非常接近;setobject.c
实现最初是作为dictobject.c
的副本启动的。dictobject.c
有更多的实现注释和跟踪调用,但核心函数的实际实现仅在细节上有所不同。
最明显的区别是哈希表中的键不像字典中那样用于引用值,因此asetentry
struct只具有缓存的哈希和键,dictentry
struct添加一个值指针。
在我们拥有内置的set
之前,我们已经拥有了sets
module,这是一个纯Python实现,它使用dict
对象来跟踪作为键的设置值。在sets
模块可用之前的Python版本中,我们只是这样做:使用键作为设置值的dict
对象来跟踪唯一的、无序的值。