2014-06-11 42 views

回答

4

在CPython中,sets和dicts使用相同的基本数据结构。集略微不同地调整它,但它基本上就像字典一样是一个散列表。

您可以查看C代码中的实现细节:setobject.cdictobject.c;实现非常接近; setobject.c实施最初是作为dictobject.c的副本而开始的。 dictobject.c有更多的实现注释和跟踪调用,但核心函数的实际实现仅在细节上有所不同。

最明显的区别在于,散列表中的键不用于引用值,如在字典中,所以setentry struct只有一个兑现散列和键,dictentry struct添加一个值指针。

在我们拥有内置set之前,我们有了sets module,这是一个纯Python实现,它使用dict对象将设置值作为关键字进行跟踪。在sets模块可用之前的Python版本中,我们做到了这一点:使用dict对象以键作为设置值,以跟踪唯一的无序值。

0

这两个在后端使用相同的数据结构。例如在集合中,您不能存储重复值,但在字典中,您可以存储多个相同的值,并且可以通过更改字典的行为来设置字典集