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看见