首页   注册   登录
 XiiLii 最近的时间轴更新

XiiLii

V2EX 第 316391 号会员,加入于 2018-05-14 21:56:46 +08:00
微信公众号:display3d
根据 XiiLii 的设置,主题列表只有在你登录之后才可查看
XiiLii 最近回复了
@enjoyCoding 我不喜欢最后的结局是程心和关一帆一起
@MrStark 红米手机里的多看阅读
@thechosenone

字典本身是属于“无序序列”,这里的无序不是说每次的排列顺序都是随机排列,不是说这次输出 c, a, b,下次可能输出 b, c, a,不是这个意思

首先需要知道 dict 是基于哈希表的数据结构,哈希表是一块连续的内存空间(数组),这个数组里的元素叫做表元,表无存储的是 key-value 对,而 key-value 对具体是在这个数组里的那个位置(索引),需要使用散列函数对 key 进行 hash 值等一系列的计算才知道(这些是 Python 解释器自动完成,不需要我们主动去做)。

打个比方:key 就像一个班级里的学生,他们排在一起看起来有高有矮看起来很乱,普通人眼中的有序就是他们应该按照从高到矮或从矮到高这样的顺序排列,但是他们实质上是按照身份证号码的大小来排的,相对身份证号来说它是有序的,只是相对身高来说他们是无序的。

字典的无序也是类似的道理(不考虑散列冲突等情况),
@ChristopherWu 是的,我也觉得直接看源码会好很多,这样理解会更深
@zhengxiaowai 是的,你说的第 2 点我有了解过,这里没讲这么详细是因为我这篇文章主要是纠正我之前的错误认识,hash 是对 key,不是对 key 内存地址,关于你说的第 1 点我没了解过,感谢分享哈
@bwangel 谢谢哈
@oott123 我是拿其中的一个可哈希对象来作例子,纠正我之前说的错误推论
@vipppppp 因为那篇文章底部有帮指出错误了,这里再总结下

不好意思,是我眼花了,应该是 `hash(id('a')) - hash(id('b')) == id('a') - id('b')`
@simonliu2018 我之前就是被这个误导了,这是缓存被复用了
63 天前
回复了 XiiLii 创建的主题 Python 存储 dict 的元素前是计算 key 的 hash 值?
@frostming 发了好几个地方,就你有能力指出的我的错误,非常感谢
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   667 人在线   最高记录 3821   ·  
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.1 · 9ms · UTC 21:53 · PVG 05:53 · LAX 13:53 · JFK 16:53
♥ Do have faith in what you're doing.
沪ICP备16043287号-1