gpt4 book ai didi

python - 为什么 Python 2.7 中的 dict 定义比 Python 3.x 中的更快?

转载 作者:IT老高 更新时间:2023-10-28 22:19:53 26 4
gpt4 key购买 nike

我遇到了一种(不是很罕见的)情况,我不得不使用 map() 或列表理解表达式。然后我想知道哪个更快。

This StackOverflow 的回答为我提供了解决方案,但后来我开始自己测试。基本上结果是一样的,但是我在切换到 Python 3 时发现了一个我很好奇的意外行为,即:

λ iulian-pc ~ → python --version
Python 2.7.6
λ iulian-pc ~ → python3 --version
Python 3.4.3

λ iulian-pc ~ → python -mtimeit '{}'
10000000 loops, best of 3: 0.0306 usec per loop
λ iulian-pc ~ → python3 -mtimeit '{}'
10000000 loops, best of 3: 0.105 usec per loop

λ iulian-pc ~ → python -mtimeit 'dict()'
10000000 loops, best of 3: 0.103 usec per loop
λ iulian-pc ~ → python3 -mtimeit 'dict()'
10000000 loops, best of 3: 0.165 usec per loop

我曾假设 Python 3 比 Python 2 快,但在几篇文章(12)中证明并非如此。然后我想也许 Python 3.5 在这样一个简单的任务上会表现得更好,正如他们在他们的 README 中所说的:

The language is mostly the same, but many details, especially how built-in objects like dictionaries and strings work, have changed considerably, and a lot of deprecated features have finally been removed.

但不,它的表现更差:

λ iulian-pc ~ → python3 --version
Python 3.5.0

λ iulian-pc ~ → python3 -mtimeit '{}'
10000000 loops, best of 3: 0.144 usec per loop
λ iulian-pc ~ → python3 -mtimeit 'dict()'
1000000 loops, best of 3: 0.217 usec per loop

我试图深入研究 dict 的 Python 3.5 源代码,但我对 C 语言的了解不足以自己找到答案(或者,我什至没有搜索正确的地方)。

所以,我的问题是:

在诸如 dict 定义这样相对简单的任务上,与旧版本的 Python 相比,新版本的 Python 速度慢的原因是什么,按照常识,反之亦然?我知道这些差异是如此之小,以至于在大多数情况下它们可以被忽略。这只是一个让我好奇为什么时间增加而不是至少保持不变的观察?

最佳答案

因为没人关心

您引用的差异大约为数十或数百纳秒。 C 编译器如何优化寄存器使用的微小差异很容易导致此类更改(就像任何数量的其他 C 级优化差异一样)。反过来,这可能是由许多因素引起的,例如 Python (CPython) 的 C 实现中局部变量的数量和使用发生变化,甚至只是切换 C 编译器。

事实是,没有人积极针对这些小差异进行优化,因此没有人能够给你一个具体的答案。 CPython 的设计并不是绝对意义上的快速。它被设计成可扩展。因此,例如,您可以将成百上千的项目塞入字典中,它会继续表现良好。但是创建字典的绝对速度根本不是 Python 实现者最关心的问题,至少在差异如此之小时是这样。

关于python - 为什么 Python 2.7 中的 dict 定义比 Python 3.x 中的更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37502392/

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