在python中,当我们从字典中删除一个项目时,字典是否会调整大小或重建字典表。从一些网站和博客我学到的是,当我们从字典中删除一个项目时,python将一个虚拟键插入到已删除的键中以填充字典条目,稍后一个python将通过调用一些清理函数来清理虚拟键。
可以指导任何一个好的网站或文档,它们在python中解释了字典实现。
答案 0 :(得分:5)
是的,删除键时字典大小会发生变化,因为外部长度会发生变化。这意味着在删除循环内的键时循环遍历字典时会抛出异常。
是的,一个标记值(名为dummy
)用于替换已删除的密钥,因此对现有值的哈希冲突测试仍会找到现有值。
但是,表格不重建;重建仅适用于插入。是的,这意味着一个大字典表会在经过大量删除后继续使用一些内存;您可以通过用副本替换字典来强制调整大小,或者通过插入新值直到表格为2 / 3rds满(此时调整大小最终可以缩小表格)。
如果您感到好奇并且对C足够了解,请查看C implementation以获取所有(详细记录的)详细信息。您还可以观看Pycon 2010 presentation by Brandon Rhodes关于CPython dict
的工作原理,或者获取Beautiful Code的副本,其中包括Andrew Kuchling撰写的有关实施的章节。
答案 1 :(得分:1)
是。插入和删除虚拟键,就像你说的那样。
以下是Laurent Luce关于此主题的博文:http://www.laurentluce.com/posts/python-dictionary-implementation/。
最后一节回答了你的问题。