【发布时间】:2022-12-22 16:08:18
【问题描述】:
在回答另一个 SO 问题 (there) 时出现了这个问题。
当我在 python 集上迭代几次(在调用之间不更改它)时,我可以假设它总是以相同的顺序返回元素吗?如果不是,更改顺序的理由是什么?它是确定性的还是随机的?或实现定义?
当我重复调用同一个 python 程序时(不是随机的,不依赖于输入),我会得到相同的集合顺序吗?
潜在的问题是 python 集合迭代顺序是否仅取决于用于实现集合的算法,或者还取决于执行上下文?
【问题讨论】:
-
我认为这里的共识是,没有任何理智的语言会提供一种顺序自发改变的数据结构,但没有一个理智的程序员会在没有被明确告知的情况下做出这样的假设。清楚地答案是默认不变性。
-
@JoshLee:Go 的 map 迭代是故意随机化的,以捕获由排序假设引起的错误。
-
我会使用术语“确定性”而不是“稳定”