set 是无序的,但为什么两个变量总是以相同的顺序打印?

set is unordered but why there two variable are always printed in same order?

x1 = {'foo', 'bar', 'baz'}
x2 = {'baz', 'qux', 'quux'}

a=((x1.union(x2)))
b=(x1 | x2)
print(a)  #{'qux', 'bar', 'quux', 'baz', 'foo'}
print(b)  #{'qux', 'bar', 'quux', 'baz', 'foo'}
# a and b are always printed in a same order

print(a is b)  #false

每次执行时ab的顺序会发生变化,但它们打印时的顺序始终相同。
因为 set 是无序的,所以我希望 ab 在打印时的顺序应该不同。
我已阅读这 2 个相关链接,但找不到答案:
Why does a set display in same order if sets are unordered?
Why is the order in dictionaries and sets arbitrary?

每个字符串都被翻译成一个数字(哈希)。然后,当在散列 table 上调用 for each 过程时,可能会从最低散列到最高散列枚举元素。这就是为什么插入它们的顺序无关紧要以及相同元素的枚举顺序始终相同的原因。 hashtables 中没有内在的“随机性”,hash 计算是确定性的,就像枚举一样。