Python 3 中调用 dict.keys() 的复杂度是多少?

What is the complexity of calling of dict.keys() in Python 3?

dict.keys() 在 python 中的渐近复杂度是多少?

我找到了 this website 但没有答案。我正在使用 Python 3,但我想这不是特定于版本的。

在Python3中,dict.keys()returns一个view object。本质上,这只是一个 window 直接到字典的键上。例如,没有通过 hashtable 循环来构建新对象。这使得调用它成为一个常数时间,即 O(1) 操作。

字典的视图对象从 here; the creation of new view objects uses dictview_new 开始实现。这个函数所做的就是创建指向字典的新对象并增加引用计数(用于垃圾跟踪)。

在Python2、dict.keys()returns一个列表对象。要创建这个新列表,Python 必须遍历散列 table,将字典的键放入列表中。这是作为函数 dict_keys 实现的。这里的时间复杂度与字典的大小成线性关系,即 O(n),因为必须访问 table 中的每个槽。

N.B。 Python 2 中的 dict.viewkeys() 与 Python 3 中的 dict.keys() 相同。