【发布时间】:2020-07-31 00:20:55
【问题描述】:
当我研究 clone vs dup 时,我尝试复制如下对象:
a = {'key1' => 1, 'key2' => {'key3' => 3, 'key4' => 4}}.freeze
b = a.clone
c = a.dup
a['key1'] = 32
# => RuntimeError: can't modify frozen Hash
b['key1'] = 32
# => RuntimeError: can't modify frozen Hash
c['key1'] = 32
# => 32
大写结果,a和b值共享内存 但是,当我检查变量 object_id 时,它会返回不同的结果:
a.object_id ## original
=> 70219554622880
b.object_id ## clone
=> 70219554589820
但在哈希键中 object_id 是相同的。
a['key1'].object_id ## original
=> 3
b['key1'].object_id ## clone
=> 3
c['key1'].object_id ## dup
=> 65
我不明白 a 和 b 变量与 object_id 不匹配,但在哈希键 object_id 中是相同的。
您能告诉我您的想法、答案或意见吗? 谢谢。
【问题讨论】:
标签: ruby