gpt4 book ai didi

python - 为什么 'key in d.keys()' 在 O(n) 时间内完成,而 'key in d' 在 O(1) 内完成?

转载 作者:行者123 更新时间:2023-11-28 20:22:15 24 4
gpt4 key购买 nike

<分区>

我有一个关于 this one 的后续问题.原始问题的一位评论者提到他过去曾看到人们错误地使用如下语法:

key in d.keys()

在 O(n) 时间内完成,而不是

key in d

在 O(1) 时间内完成,没有意识到差异。直到今天(当我在试图理解为什么我的代码运行如此缓慢之后偶然发现了最初的问题时),我就是那些人中的一员。我尝试使用 Python 2.7.5 验证评论的准确性,果然,这是 timeit 的结果:

$ python -m timeit -s 'd=dict.fromkeys(range(100))' '1000 in d.keys()'
100000 loops, best of 3: 2.18 usec per loop
$ python -m timeit -s 'd=dict.fromkeys(range(100))' '1000 in d'
10000000 loops, best of 3: 0.0449 usec per loop
$ python -m timeit -s 'd=dict.fromkeys(range(1000))' '10000 in d.keys()'
100000 loops, best of 3: 17.9 usec per loop
$ python -m timeit -s 'd=dict.fromkeys(range(1000))' '10000 in d'
10000000 loops, best of 3: 0.0453 usec per loop

对于具有 100 个键的字典,速度有大约 50 倍的差异(2.19 usec/0.0449 usec),对于具有 1000 个键的字典,对于显式搜索,速度有 400 倍的差异(17.9 usec/0.0453 usec)构造使得搜索键太大而无法在字典中找到。所以换句话说,O(n) vs. O(1),正如评论者所说。

我的问题:为什么不同?这两种语法看起来几乎是一样的!很明显,Python 在这两种情况下必须做一些非常不同的事情,但究竟是什么内部发生的事情导致了这种区别?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com