python 字典为什么是无序的?
2016-04-25 15:48
495 查看
作者:林诚
链接:https://www.zhihu.com/question/24306558/answer/27358613
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
那本书都写了啥...(以下用Hash 简称 Hash Table)
Hash的思想很简单, 就是跟 index sorting 一个内核, 申请一个Array, 并将Array的位置作为一种元数据
在 index 排序的时候, 很朴素的, 数值的大小就是 放入array的位置,
举个例子 我有int A[6], 我要排序 2 5 4 8
将这些数分别放入Array的2 5 4 8位, 然后按顺序读出, 数列就以O(n)的速度排列完了
Hash 和 Index 不同的是,
从数值到Array位置的映射是不一样的, 在Index sorting中, 数值在Array的位置就是数值本身
在Hash中, 是变化的算法, 用Key算出在Array的位置, 放入Value
比如我的Key是10, 在Hash中, 可能会把Value放到Array位置2上
在这种算法下, 插入顺序是不可估计的.
第一次操作, Key 2 Value 90 插入到 Hash Table A, 算出来位置是 5
第二次操作, Key 9 Value 10 插入到 Hash Table A, 算出来位置是 3
你发现了没有, Hash Table根本不保证插入的顺序
后来的数据是可以跑到先插入的数据前面去的.
Hash的本质是, 将一数列作为Key尽量平均分配另一个数列Value到程序已经申请好的Array上.
最后说点无关的, 也会导致字典乱序的原因.
Python会自动扩容字典.
链接:https://www.zhihu.com/question/24306558/answer/27358613
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
那本书都写了啥...(以下用Hash 简称 Hash Table)
Hash的思想很简单, 就是跟 index sorting 一个内核, 申请一个Array, 并将Array的位置作为一种元数据
在 index 排序的时候, 很朴素的, 数值的大小就是 放入array的位置,
举个例子 我有int A[6], 我要排序 2 5 4 8
将这些数分别放入Array的2 5 4 8位, 然后按顺序读出, 数列就以O(n)的速度排列完了
Hash 和 Index 不同的是,
从数值到Array位置的映射是不一样的, 在Index sorting中, 数值在Array的位置就是数值本身
在Hash中, 是变化的算法, 用Key算出在Array的位置, 放入Value
比如我的Key是10, 在Hash中, 可能会把Value放到Array位置2上
在这种算法下, 插入顺序是不可估计的.
第一次操作, Key 2 Value 90 插入到 Hash Table A, 算出来位置是 5
第二次操作, Key 9 Value 10 插入到 Hash Table A, 算出来位置是 3
你发现了没有, Hash Table根本不保证插入的顺序
后来的数据是可以跑到先插入的数据前面去的.
Hash的本质是, 将一数列作为Key尽量平均分配另一个数列Value到程序已经申请好的Array上.
最后说点无关的, 也会导致字典乱序的原因.
Python会自动扩容字典.
相关文章推荐
- python中常见的报错问题
- python_笔记4_dict字典
- python内建函数总结
- Python入门教程 超详细1小时学会Python
- OpenCV之Python学习笔记
- Python学习(一)Windows平台环境搭建
- 《机器学习实战》Logisic回归算法(2)之从疝气病症预测病马的死亡率
- python经典书籍
- Python-day3作业-haproxy配置文件管理脚本
- Python 不同层级目录文件的导入
- Python脚本运行出现语法错误
- 正则表达式 ——python 基础
- Python一日一练18----用turtle写猫和老鼠小游戏
- python的内存管理机制
- Python:类
- Python菜鸟晋级12----用pyinstaller将.py文件打包成.exe执行文件
- Python字典方法总结
- python_笔记3_list列表(有序集合)
- Python:渗透测试开源项目【源码值得精读】
- python_笔记2_短路计算(SS)