【问题标题】:What is the complexity of calling of dict.keys() in Python 3?在 Python 3 中调用 dict.keys() 的复杂性是什么?
【发布时间】:2015-11-17 20:38:04
【问题描述】:

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

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

【问题讨论】:

  • 它是O(1),但需要一个额外的函数调用。
  • 这是特定于版本的,因为 Python 2 keys() 返回一个列表,而在 Python 3 中它返回一个字典视图对象。
  • 您是否正在查看 dict.keys() 中的操作,例如字典视图的生成或生成本身?
  • 我不认为这是重复的——另一个问题是关于字典上的in,这是关于方法本身的。它们密切相关,但并不相同。

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


【解决方案1】:

在 Python 3 中,dict.keys() 返回一个 view object。本质上,这只是一个直接指向字典键的窗口。例如,没有在哈希表上循环来构建新对象。这使得将其称为常数时间,即 O(1) 操作。

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

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

注意Python 2 中的 dict.viewkeys() 与 Python 3 中的 dict.keys() 相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 2012-09-17
    • 2022-08-17
    相关资源
    最近更新 更多