gpt4 book ai didi

python - 在字典中使用字符串作为键总是更快吗?

转载 作者:IT老高 更新时间:2023-10-28 20:40:33 24 4
gpt4 key购买 nike

关于这个page ,我看到了一些有趣的东西:

请注意,(在实践中)只处理 str 键的 dicts 有一条快速路径;这不会影响算法的复杂性,但会显着影响常数因素:典型程序完成的速度。

那么它到底是什么意思呢?

这是否意味着使用字符串作为键总是更快?

如果是,为什么?

更新:

感谢关于优化的建议!但实际上我更感兴趣的是显而易见的事实,而不是我们是否应该或何时应该进行优化。

更新 2:

感谢您的精彩回答,我将引用 link 中的内容此处由@DaveWebb 提供:

"...

ma​​_lookup 最初设置为 lookdict_string 函数(在 3.0 中重命名为 lookdict_unicode),它假定字典中的键和正在搜索的键是标准的 PyStringObject。然后它可以进行一些优化,例如减轻各种错误检查,因为字符串到字符串的比较不会引发异常。也不需要富对象比较,这意味着我们避免调用 PyObject_RichCompareBool,而总是直接使用 _PyString_Eq

..."

另外,对于实验数字,我认为如果不进行int到字符串的转换,差异的大小会更大

最佳答案

作为 Python dict 基础的 C 代码针对字符串键进行了优化。 You can read about this here (以及该博客所指的书中)。

如果 Python 运行时知道你的 dict 只包含字符串键,它可以做一些事情,例如不处理字符串到字符串比较不会发生的错误,并忽略丰富的比较运算符。这将使字符串键的常见情况 dict 快一点。 (更新:时间显示它不止一点。)

但是,这不太可能对大多数 Python 程序的运行时间产生重大影响。如果您已测量并发现 dict 查找是您代码中的瓶颈,则只需担心此优化。 As the famous quote says, "Premature optimization is the root of all evil."

查看事物真正速度的唯一方法是对它们进行计时:

>>> timeit.timeit('a["500"]','a ={}\nfor i in range(1000): a[str(i)] = i')
0.06659698486328125
>>> timeit.timeit('a[500]','a ={}\nfor i in range(1000): a[i] = i')
0.09005999565124512

因此,即使与 int 键相比,使用字符串键也快 30%,我不得不承认我对差异的大小感到惊讶。

关于python - 在字典中使用字符串作为键总是更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11162201/

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