为什么添加可变会产生不同的哈希值?

Why does adding mutable produce different hash values?

我有一个像这样的简单 struct,没有自定义 ==hash() 方法:

struct IntroductionMessage
    message::String
end

当我调用 hash() 两个 return 相同的值时:

say_hello_introduction = IntroductionMessage("Hello World")
say_hello_introduction_alternate = IntroductionMessage("Hello World")

hash(say_hello_introduction))
hash(say_hello_introduction_alternate))

# Output:
3650104434
3650104434

当我添加 mutable 关键字时,现在是 mutable struct IntroductionMessagehash() 值不同:

2957940122
238434212

字符串本身从未改变,那么为什么添加 mutable 会产生不同的结果?

默认情况下,不可变 struct 按值散列,而 mutable struct 按引用散列。这与默认的相等操作匹配。