Ruby 为什么更改新哈希中的值会影响旧哈希

Ruby 为什么更改新哈希中的值会影响旧哈希,ruby,Ruby,假设我们有 hash = { a: 1, b: 2 } hash2 = hash.to_hash 当我更改哈希2中的值时,它会影响哈希中的值 hash2[:a] = 5 # hash[:a] = 5 为什么鲁比会这样? 如何修复此问题?hash和hash2是同一个对象 2.6.5 :001 > hash = { a: 1, b: 2 } => {:a=>1, :b=>2} 2.6.5 :002 > hash2 = hash.to_hash => {:

假设我们有

hash = { a: 1, b: 2 }
hash2 = hash.to_hash
当我更改哈希2中的值时,它会影响哈希中的值

hash2[:a] = 5
# hash[:a] = 5
为什么鲁比会这样? 如何修复此问题?

hash
hash2
是同一个对象

2.6.5 :001 > hash = { a: 1, b: 2 }
 => {:a=>1, :b=>2} 
2.6.5 :002 > hash2 = hash.to_hash
 => {:a=>1, :b=>2} 
2.6.5 :003 > hash.object_id
 => 70244375263800 
2.6.5 :004 > hash2.object_id
 => 70244375263800 
hash
hash2
是同一个对象

2.6.5 :001 > hash = { a: 1, b: 2 }
 => {:a=>1, :b=>2} 
2.6.5 :002 > hash2 = hash.to_hash
 => {:a=>1, :b=>2} 
2.6.5 :003 > hash.object_id
 => 70244375263800 
2.6.5 :004 > hash2.object_id
 => 70244375263800 

例如,您可以编写
hash2={}.merge(hash)
,或者只编写
hash.merge
或者甚至
hash.dup
ov-even hash。clone@Taoufik例如,您可以编写
hash2={}.merge(hash)
,或者只编写
hash.merge
甚至
hash.dup
ov偶数散列。clone@Taoufik看见