python - python Set的非确定顺序
问题描述
我今天才发现 python 设置顺序是任意的,我对这个事实感到惊讶。我一直认为和的底层实现set
非常dict
相似,都是哈希表。我认为的主要区别是dict
每个键都有一个值,而set
没有。因此,顺序与插入元素的方式不同,但具有确定性。
直到我发现它不是真的set
。
$ cat ht_order.py
colors = ['blue', 'red', 'green', 'yellow']
print(set(colors))
print(dict((c, c) for c in colors))
在终端中运行它:
$ python3 ht_order.py
{'red', 'yellow', 'blue', 'green'}
{'blue': 'blue', 'red': 'red', 'green': 'green', 'yellow': 'yellow'}
$ python3 ht_order.py
{'yellow', 'blue', 'green', 'red'}
{'blue': 'blue', 'red': 'red', 'green': 'green', 'yellow': 'yellow'}
$ python3 ht_order.py
{'green', 'yellow', 'red', 'blue'}
{'blue': 'blue', 'red': 'red', 'green': 'green', 'yellow': 'yellow'}
为什么set
顺序不断变化?
编辑:
尝试在 python2 中运行,每次都得到相同的结果。
$ python2 ht_order.py
set(['blue', 'green', 'yellow', 'red'])
{'blue': 'blue', 'green': 'green', 'yellow': 'yellow', 'red': 'red'}
解决方案
推荐阅读
- unit-testing - 如何在 Kotlin 中对 ViewModel 进行 Mockito 单元测试
- javascript - 为什么 Array.prototype.sort 在 Chrome 中有不同的行为?
- swift - 从 Swift/MacOS 运行 shell 脚本
- django - Django rest - 路由器没有创建 url 路径,给出 404,并且 api 网页列出了不正确的 url
- python - 在 pandas 多索引中使用条件函数编辑数据
- nginx - 如何在一个托管服务提供商上托管我网站的根 URL ('/'),而在另一个托管服务提供商上托管所有其他 URL?
- typescript - 尝试以功能方式生成记录器工厂
- scala - 如何在现有的 SBT scala 项目中互操作 kotlin 代码
- google-cloud-platform - 从 GCP Firestore 导出文档所需的最低权限
- sql - SQL如何从两列中提取不同的数据