【发布时间】:2015-08-12 18:19:27
【问题描述】:
众所周知,Python 的一些数据结构使用 哈希表 来存储 set 或 dictionary 等项目。所以这些对象没有顺序。但是,对于某些数字序列,这似乎是不正确的。
例如考虑以下示例:
>>> set([7,2,5,3,6])
set([2, 3, 5, 6, 7])
>>> set([4,5,3,0,1,2])
set([0, 1, 2, 3, 4, 5])
但是如果我们做一个小改动,它就不会被排序:
>>> set([8,2,5,3,6])
set([8, 2, 3, 5, 6])
那么问题来了:Python 的哈希函数是如何处理整数序列的?
【问题讨论】:
-
“未排序”并不意味着“永远不会出现排序”;它只是意味着没有特定的保证顺序。
-
有趣的事实:
go作者决定主动随机化这些数据结构的迭代,以提醒用户对其顺序没有任何保证。 blog.golang.org/go-maps-in-action(在“迭代顺序”下)
标签: python python-3.x python-2.7 hashtable python-internals