Julia的字典与集合在多次运行间是否保持顺序稳定性?
Julia字典与集合的键顺序稳定性问题
Julia中的Dict不会保留键的原始插入顺序,这是由其底层哈希表实现逻辑决定的。但很多开发者会关心:如果按固定顺序构造字典(或集合),多次运行程序时,键的遍历顺序是否能保持稳定?
比如运行这段代码:
dictionary = Dict(1 => 77, 2 => 66, 3 => 1, 50 => 2) print(collect(keys(dictionary)))
实际测试中每次运行都会输出[50, 2, 3, 1],这种稳定性是否适用于所有键类型(比如整数)?
可以明确的是:对于整数这类不可变且哈希值固定无随机化的键类型,Julia中固定插入顺序构造的字典/集合,多次运行的键遍历顺序是稳定的。原因在于这类类型的哈希值不会随程序运行发生变化,哈希表的槽位分配逻辑固定,因此遍历顺序始终一致。
对比Python的情况:Python的集合(以及字典)对字符串、字节串等类型,默认会给哈希值添加随机盐,每次程序启动时随机盐都会变化,导致哈希表的槽位分配改变,遍历顺序也就不稳定。而Julia目前没有给内置基本类型的哈希值添加随机盐的机制,因此对于整数、浮点数这类基本类型,键的遍历顺序在多次运行间是稳定的。
需要注意的是:如果自定义类型的哈希实现包含随机因素,或者后续Julia版本引入哈希随机化机制,这种稳定性就可能被打破。
内容的提问来源于stack exchange,提问作者Tortar
相关产品推荐
相关产品推荐

