Cả hai tạo shallow copy của object — instance variable được sao chép theo tham chiếu (nested object vẫn là cùng 1 object). Điểm khác biệt:
dup | clone | |
|---|---|---|
| Giữ frozen state | Không — luôn tạo object mutable | Có — copy vẫn frozen nếu original frozen |
| Giữ singleton methods | Không | Có |
| Giữ extended modules | Không | Có |
ruby
original = "hello".freeze
original.dup.frozen? # => false — unfrozen copy
original.clone.frozen? # => true — vẫn frozen
# Singleton method
obj = Object.new
def obj.greet = "hi"
obj.dup.greet # => NoMethodError — singleton không được copy
obj.clone.greet # => "hi"Quy tắc: dup khi muốn bản sao mutable sạch; clone khi cần giữ nguyên tính chất object.