pal*_*dot 4 python set python-internals
我首先看一下Python wikibook中的python语言.
对于集合,提到以下内容 - We can also have a loop move over each of the items in a set. However, since sets are unordered, it is undefined which order the iteration will follow.
并给出了代码示例
s = set("blerg")
for letter in s:
print letter
Run Code Online (Sandbox Code Playgroud)
输出:
r b e l g
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,无论我运行多少次,我都会以相同的顺序得到结果.如果集合是无序的并且迭代顺序未定义,为什么它以相同的顺序返回集合?订单的基础是什么?
[ PS:对不起,如果我误解了一些非常基本的东西.我是一个蟒蛇新手]
Mar*_*ers 11
它们不是随机订购的,它们是任意订购的.这意味着您不应指望维护插入的顺序,因为实际的内部实现细节决定了顺序.
顺序取决于集合的插入和删除历史记录.
在CPython中,集合使用散列表,其中插入的值基于hash()函数返回的值插入稀疏表,以表大小和冲突处理算法为模.列出设置内容然后返回此表中排序的值.
如果你想深入了解细节技术细节,那么看看为什么字典中的顺序和任意设置?; 集合的核心是字典,其中键是set值,并且没有关联的字典值.实际的实现与往常一样复杂一点,但这个答案足以让你在那里大部分时间.然后查看其余详细信息的C源代码set.
将此与列表进行比较,列表具有您可以影响的固定订单; 您可以在列表中移动项目,并为您维护新的订单.