В отличие от назначения простых примитивных объектов, таких как целые числа, когда вы назначаете переменную хешу, она будет указывать на тот же хеш-объект.Таким образом, 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