我有一个set
,我添加项目(整数),当我打印它时,项目显然是排序的:
a = set() a.add(3) a.add(2) a.add(4) a.add(1) a.add(5) print a # set([1, 2, 3, 4, 5])
我尝试过各种各样的价值观,显然它只需要整数.
我在MacOSX下运行Python 2.7.5.它也使用repl.it进行复制(参见http://repl.it/TpV)
问题是:这是在某处记录的(到目前为止还没有找到),这是正常的,是否可以依赖?
额外的问题:什么时候完成排序?在印刷期间?它内部存储排序?(考虑到预期的插入复杂性,这是否可能?)
这是巧合.数据既没有排序也没有__str__
排序.
整数的哈希值等于它们的值(除了范围-1
之外的长整数sys.maxint
),这增加了整数按顺序排列的机会,但这不是给定的.
set
使用哈希表来跟踪包含的项目,并且排序取决于哈希值以及插入和删除历史记录.
整数和集合之间交互的方式和原因都是实现细节,并且可以随版本的不同而变化.Python 3.3为某些类型引入了哈希随机化,Python 3.4对此进行了扩展,使得Python流程重启之间的集合和字典的排序也变得不稳定(取决于存储的值的类型).