python set和dict之间的区别“内部”

com*_*tor 2 python dictionary set python-2.7 python-internals

谁能告诉我set和dict的内部实现在python中有何不同?他们在后台使用相同的数据结构吗?

++从理论上讲,可以使用dict来实现集合功能。

Mar*_*ers 5

在CPython中,集合和字典使用相同的基本数据结构。设置对它的调整略有不同,但是就像字典一样,它基本上是一个哈希表。

您可以看一下C代码中的实现细节:setobject.cdictobject.c; 实现非常接近;该setobject.c实现是作为dictobject.c原始版本的副本开始的。dictobject.c有更多的实现说明和跟踪调用,但是核心功能的实际实现仅在细节上有所不同。

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

在拥有内建函数之前set,我们有一个sets模块,这是一个纯Python实现,它使用dict对象将设置值作为键来跟踪。在该sets模块可用之前的Python版本中,我们只是这样做:使用dict带有键的对象作为设置值,以跟踪唯一的无序值。