python 字典为啥这么快

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 字典为啥这么快相关的知识,希望对你有一定的参考价值。

因为字典是通过键来索引的,关联到相对的值,理论上他的查询复杂度是O(1)。
哈希表(也叫散列表),根据关键值对(Key-value)而直接进行访问的数据结构。它通过把key和value映射到表中一个位置来访问记录,这种查询速度非常快,更新也快。而这个映射函数叫做哈希函数,存放值的数组叫做哈希表。 哈希函数的实现方式决定了哈希表的搜索效率。
参考技术A hash查找是O(1)算法。。。普通的遍历O(n)

为啥比较运算符这么快?

【中文标题】为啥比较运算符这么快?【英文标题】:why comparisons operators are so quick?为什么比较运算符这么快? 【发布时间】:2018-11-03 16:29:52 【问题描述】:

根据 Alexandrescu 的文章https://www.facebook.com/notes/facebook-engineering/three-optimization-tips-for-c/10151361643253920/

操作的速度层次是:

    比较 (u)int 加、减、bitops、移位 浮点加、减(单独的单位!) 索引数组访问(警告:缓存效果) (u)int32 数 FP 多重 FP 除法,余数 (u)int 除法,余数

我不明白为什么比较这么快。

如何快速比较两个大数?算法是什么?

【问题讨论】:

恕我直言,(整数)比较与(整数)减法一样快,因为实际上它带有丢弃结果的减法 - 除了处理器状态标志 Z、N、V、C。 IMHO, (integer) comparsion is as fast as (integer) subtraction because effectively it is subtration 你说的是cmp 指令,还有另一个指令test,它执行按位与。 @ReAl 我也猜到了。另一方面,它是亚历山德雷斯库。 (我的书架上有他的一本书。) ;-) 难道是 discarded result 使比较更快。 (它不需要写回结果。)查看机器命令循环表会有所帮助...... Agner Fog's website 是此类场合的好来源。他有Instruction tables for Intel, AMD, and VIA CPUs。 cmp 本身并不比 add 快,但是 arith-branch 对(包括 add+jz!,而不仅仅是与 cmp 的组合)的成本与从这个意义上说,单独的分支有时可以“免费”添加cmp 【参考方案1】:

这些比较很快,因为它们很容易。有问题的文章正在谈论数值的比较。一般来说,它们分为两种类型:将一个整数与另一个格式相同的整数进行比较,以及比较两个浮点数。

在整数比较的情况下,使用的整数格式可以以非常直接的方式比较两个值,按特定顺序查看特定位(符号位、高位位,然后是低位-订单位)。

在浮点数的情况下,绝大多数值将表示为in a normalised form,因此您可以按顺序进行比较:

对应的符号位,如果它们相等 对应的指数,如果它们相等 对应的尾数(从高位到低位,按位)。

此类比较在通用处理器中非常常见且非常重要,以至于它们将针对速度进行优化。

【讨论】:

以上是关于python 字典为啥这么快的主要内容,如果未能解决你的问题,请参考以下文章

为啥 django 模板渲染字典这么慢?

为啥这个字典理解这么慢?请建议加快速度的方法

Python 为啥list不能作为字典的key

Python通过字符串来执行函数甚至代码!这么顶的操作快来了解下!

Redis为什么这么快?

为啥这个循环比创建字典的字典理解更快?