【发布时间】:2014-08-01 07:42:24
【问题描述】:
谁能告诉我 set 和 dict 的内部实现在 python 中有何不同?他们在后台使用相同的数据结构吗?
++理论上可以使用dict实现set功能。
【问题讨论】:
标签: python python-2.7 dictionary set python-internals
谁能告诉我 set 和 dict 的内部实现在 python 中有何不同?他们在后台使用相同的数据结构吗?
++理论上可以使用dict实现set功能。
【问题讨论】:
标签: python python-2.7 dictionary set python-internals
在 CPython 中,集合和字典使用相同的基本数据结构。设置调整略有不同,但它基本上是一个哈希表,就像字典一样。
可以看一下C代码中的实现细节:setobject.c和dictobject.c;实现非常接近; setobject.c 实现最初是作为 dictobject.c 的副本启动的。 dictobject.c 有更多的实现说明和跟踪调用,但核心功能的实际实现仅在细节上有所不同。
最明显的区别是哈希表中的键不用于引用值,就像在字典中一样,所以setentry struct只有一个缓存的哈希和键,dictentry struct增加了一个值指针。
在我们拥有内置 set 之前,我们拥有 sets module,这是一个纯 Python 实现,它使用 dict 对象来跟踪作为键的设置值。在 sets 模块可用之前的 Python 版本中,我们这样做了:使用带有键的 dict 对象作为设置值,以跟踪唯一的、无序的值。
【讨论】:
这两个在后端使用相同的数据结构。例如,在集合中您不能存储重复值,但在 dict 中您可以存储多个相同的值,并且您可以通过更改 dict 的行为将 dict 转换为集合
【讨论】: