【发布时间】:2018-11-22 20:44:04
【问题描述】:
根据https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt,dict.clear()的时间复杂度是O(1)。
据我所知,dict.clear() 与分配 dict = {} 不同,因为 dict.clear() 对同一个 dict 进行更改,而 dict = {} 创建一个新的 dict。
现在如果 dict.clear() 正在清除同一个 dict 对象,那么它如何在 O(1) 中完成它。
【问题讨论】:
-
也许通过破坏内部数据结构并让垃圾收集器完成肮脏的非 O(1) 工作。它不是循环遍历元素并一一删除。
-
PyDict_Clear的实现可以在here 找到。 -
for (i = 0; i < n; i++) Py_CLEAR(oldvalues[i]);在我看来不像O(1)...看来我错了 -
有趣的是,这里没有讨论 clear 的复杂性wiki.python.org/moin/TimeComplexity
标签: python dictionary time-complexity python-internals