【发布时间】:2012-05-13 00:08:40
【问题描述】:
我了解 python 集合的元素没有排序。调用pop方法返回任意元素;我没问题。
我想知道的是,当集合具有相同的历史时,pop 是否总是返回相同的元素。当然,在一个版本的 python 中,我不介意 python 的不同版本/实现是否做自己的事情。特别是,我问的是python 2.7。在这种情况下,这不仅仅是 api 的实现问题。
我在游戏的程序地牢生成器中大量使用集合,我希望结果对于给定的种子具有确定性。
【问题讨论】:
-
为什么不测试一下/看源码?
-
@delnan " 特别是,我问的是 python 2.7。在这种情况下,这不仅仅是 api 的实现问题。"因此,无需按照您的建议测试多个版本或未来版本。您似乎已经想到了便携性和永恒性的要求。
-
@Marcin 啊,是的,对不起。我错过了。这是一种下意识的反应,许多像这样的 cmets 实际上都有我错误地指责你的缺陷(“在 C89 中是……未定义的行为吗?”——“只要在你的机器上尝试你的编译器版本,使用您碰巧选择的标志,使其工作”)。
-
如果你有 exact 相同的对象集,并且可以保证使用相同的哈希函数,那么是的,
set.pop(),以及list(set())可以是确定性的。