RubyのObject.dupとObject.cloneの違いは、特異メソッドとfreezeをコピーするかどうかである。 Object.cloneの方がコピーされる情報が多いが、一般的な用途にはObject.dupで十分だ。 以下は検証コード。 obj1 = Object.new obj1.taint def obj1.singleton_method; end obj1.freeze obj2 = obj1.dup obj3 = obj1.clone p obj1.tainted? #=> true p obj1.respond_to?(:singleton_method) #=> true p obj1.frozen? #=> true p obj2.tainted? #=> true p obj2.respond_to?(:singleton_method) #=> false p