首页 > 解决方案 > 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'}

标签: pythonset

解决方案


推荐阅读