从python中的Python dict
或defaultdict
删除密钥是O(1)操作as mentioned here和here。要从OrderedDict
中删除密钥,我们可以使用the docs中提到的del d[key]
或popitem()
方法。
OrderedDict
的基础实现是什么?del
操作的时间复杂度是什么?
编辑:此答案OrderedDict performance (compared to deque)表示del
中OrderedDict
的复杂度为O(1)。但是,我们如何才能在实现细节级别对其进行辩护呢?
答案 0 :(得分:7)
Python 3.7中OrderedDict.__delitem__
的{{3}}如下:
def __delitem__(self, key, dict_delitem=dict.__delitem__):
'od.__delitem__(y) <==> del od[y]'
# Deleting an existing item uses self.__map to find the link which gets
# removed by updating the links in the predecessor and successor nodes.
dict_delitem(self, key)
link = self.__map.pop(key)
link_prev = link.prev
link_next = link.next
link_prev.next = link_next
link_next.prev = link_prev
link.prev = None
link.next = None
此代码执行3件事:
由于上述所有操作都需要花费固定的时间,因此OrderedDict.__delitem__
的复杂度也是恒定的。