有谁能告诉我set和dict在python中的内部实现有什么不同吗?他们在后台使用相同的数据结构吗?
++理论上,可以使用dict来实现set功能。

最佳答案

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

07-26 01:22