一、区别
二、示例
- 浅复制的意思是只复制对象的第一层属性,不会递归复制嵌套的对象。
- 深复制的意思是递归复制嵌套对象
require 'active_support/core_ext/object/deep_dup'
original = { a: [1, 2, 3], b: { c: 4 } }
dup_copy = original.dup
dup_copy[:b][:c] = 5
puts original[:b][:c]
original = "hello".freeze
copy = original.dup
copy.frozen?
original = { a: [1, 2, 3], b: { c: 4 } }
deep_dup_copy = original.deep_dup
deep_dup_copy[:b][:c] = 6
puts original[:b][:c]
original = { a: [1, 2, 3], b: { c: 4 } }
clone_copy = original.clone
clone_copy[:b][:c] = 7
puts original[:b][:c]
original_str = "hello".freeze
clone_copy = original_str.clone
puts clone_copy.frozen?
三、dup 方法常用场景:通常用于创建对象的浅复制
original_array = [1, 2, 3]
copy_array = original_array.dup
copy_array << 4
puts original_array.inspect
puts copy_array.inspect
original_hash = { a: 1, b: 2 }
copy_hash = original_hash.dup
copy_hash[:c] = 3
puts original_hash.inspect
puts copy_hash.inspect
class MyClass
attr_accessor :value
end
original = MyClass.new
original.value = 10
copy = original.dup
copy.value = 20
puts original.value
puts copy.value
original_user = User.find(1)
copy_user = original_user.dup
copy_user.email = "new_email@example.com"
copy_user.save