Ruby deep clone and recursive hash merge

Ruby
def deep_clone(value)
  case value
  when Hash
    value.each_with_object({}) { |(key, item), copy| copy[key] = deep_clone(item) }
  when Array
    value.map { |item| deep_clone(item) }
  else
    value
  end
end

def deep_merge(base, override)
  base = deep_clone(base)
  override.each do |key, value|
    base[key] = base[key].is_a?(Hash) && value.is_a?(Hash) ? deep_merge(base[key], value) : deep_clone(value)
  end
  base
end