python - 集合是确定性的吗?
问题描述
在阅读诸如Get unique values from a list in python之类的问题时,您可以看到无法保留订单的备注。
这是可以理解的。让我烦恼的是它走得更远——我可以看到执行甚至不是确定性的,即:
list(set(values_list))
我会得到唯一的值,问题是每次运行的结果都会有不同的顺序。所以这意味着set
(构造函数或枚举数)不是确定性的。
我想知道它是怎么发生的?我看不出为什么在单线程执行时(?)你会得到不确定的行为。
当然,可以对结果进行排序以强制执行确定性行为,但是一旦您观察到手头有非确定性代码,您就会得到这样的想法。
更新:
我的代码的本质——该文件是一个包含 10 000 个字符串(具有 3 个唯一值)的数组的泡菜。
combined = pickle.load(open("labels.p", "rb"))
label_keys = list(set(combined))
print(label_keys)
在每次运行时,我都会得到不同的顺序。哦,我使用 Python 3.6.4。
解决方案
到目前为止我还没有看到这个问题:
>>> values_list = range(100) * 3
>>> a = list(set(values_list))
>>> b = list(set(values_list))
>>> a == b
True
>>>