当我们删除项目时,字典是否会调整大小?

Jam*_*pam 2 python dictionary

在python中,当我们从字典中删除一个项目时,字典是否会调整大小或重建字典表.从一些网站和博客我学到的是,当我们从字典中删除一个项目时,python将一个虚拟键插入到已删除的键中以填充字典条目,稍后一个python将通过调用一些清理函数来清理虚拟键.

有人可以指导任何好的网站或文档,在python下解释字典实现.

Mar*_*ers 5

是的,当你删除键时,字典大小会改变,因为向外长度会改变.这意味着在删除循环内的键时循环遍历字典时将抛出异常.

是的,使用sentinel值(命名dummy)替换已删除的键,以便仍然存在的值的哈希冲突测试仍然可以找到现有值.

但是,表没有重建; 重建仅适用于插入.是的,这意味着一个大字典表会在经过大量删除后继续使用一些内存; 你可以通过用副本替换字典来强制调整大小,或者通过插入新值直到表格为2/3rds满(此时调整大小最终会缩小表格).

如果你很好奇,并且足够了解C,请查看所有(详细记录的)详细信息的C实现.您还可以观看Brandon Rhodes关于CPython如何dict工作的Pycon 2010演示文稿,或者阅读Beautiful Code的副本,其中包括Andrew Kuchling撰写的有关实现的章节.