classObject# Returns a deep copy of object if it's duplicable.defdeep_dupduplicable??dup:selfendendclassArray# Returns a deep copy of array.defdeep_dupmap{|it|it.deep_dup}endendclassHash# Returns a deep copy of hash.defdeep_dupeach_with_object(dup)do|(key,value),hash|hash[key.deep_dup]=value.deep_dupendendend