更改多维哈希值,它仍然相等

时间:2019-09-27 17:29:08

标签: ruby

我正在尝试更新一个多维散列,然后将新散列与旧散列进行比较,但是无论我更改什么值,它们仍然显示为相等。有没有一种有效的方法可以比较两个散列中的每个值,如果一个不正确,则返回false

hash1 = {foo: {bar: "baz"}}
hash2 = hash1
hash2[:foo][:bar] = "foz"
hash2 == hash1 # This should be false but is returning true

1 个答案:

答案 0 :(得分:0)

与分配给简单的原始对象(如整数)不同,将变量分配给哈希时,它将指向同一哈希对象。 因此,hash2指向内存中与hash1相同的对象。 如果您需要它们在结构上相同但是不同的对象,则需要深度复制第一个哈希。

def deep_copy(hash)
  Marshal.load(Marshal.dump(hash))
end

hash1 = {foo: {bar: "baz"}}
hash2 = deep_copy(hash1)
hash2[:foo][:bar] = "foz"
hash2 == hash1