本人Python初学者,在python3.6练习代码发现,dict输出按照键值是有序的,而set集合输出是无序的,换句话说就是每次执行dict和set的输出,dict的都一样,但是set的内容不变而顺序会有变化。为什么会有这样的差异呢?
我查了一下是字典和集合的背后依托于散列表,散列表的工作原理我就不多说了。我自己猜测是Python在内部对于dict的输出是做了一些额外的处理所以导致它和set在输出上的差异,这么理解对吗?希望有明白原理的大神帮助我解答一下,感激不尽!
本人Python初学者,在python3.6练习代码发现,dict输出按照键值是有序的,而set集合输出是无序的,换句话说就是每次执行dict和set的输出,dict的都一样,但是set的内容不变而顺序会有变化。为什么会有这样的差异呢?
我查了一下是字典和集合的背后依托于散列表,散列表的工作原理我就不多说了。我自己猜测是Python在内部对于dict的输出是做了一些额外的处理所以导致它和set在输出上的差异,这么理解对吗?希望有明白原理的大神帮助我解答一下,感激不尽!
dict是字典,set是集合,集合很重要的特性,无序性,唯一性,确定性(就是确定某个元素是不是在该集合中)。
所以set输出是无序的是没有问题的。
至于dict与set的输出差异,不会做出额外处理。
你之前学过其他语言吗?dict
和set
都是通过hash
实现的,所以原理上来说都是无序的。
但是python3.6之后,Python的dict
的是按key值存入的时间排序的,没看过源码,但我猜是额外维护了一个key的链表。
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
python 3.6 的
dict
是键是按顺序存放的,具体可以看 python 官方文档New dict implementation
但是不应该依赖
dict
键有序,因为以后的版本可能会变化,可是使用ordereddict
明确指定键有序