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

时间:2015-08-24 12:11:07

标签: python python-3.x dictionary time-complexity asymptotic-complexity

python中dict.keys()的渐近复杂性是什么?

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

1 个答案:

答案 0 :(得分:5)

在Python 3中,dict.keys()返回view object。从本质上讲,这只是一个直接进入字典键的窗口。例如,在哈希表上没有循环来构建新对象。这使得它成为一个恒定时间,即O(1),操作。

here开始实现字典的查看对象;新视图对象的创建使用dictview_new。这个函数所做的就是创建一个指向字典并增加引用计数的新对象(用于垃圾跟踪)。

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

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