class ReeObject::DeepDup

def dup_hash(hash, opts, cache)

def dup_hash(hash, opts, cache)
  dup = {}
  dup.default = recursively_dup(hash.default, opts, cache)
  dup.default_proc = hash.default_proc if hash.default_proc
  hash.each do |k, v|
    dup[recursively_dup(k, opts, cache)] = recursively_dup(v, opts, cache)
  end
  dup_singleton_methods(hash, dup)
  
  opts[:freeze] ? dup.freeze : dup
end