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()
相同。
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()
相同。