code: def _nary_dict_update(dicts, **kwargs):
      
      copy = kwargs['copy']
      res = dicts[0].copy() if copy else dicts[0]
      if len(dicts) == 1:
          return res
  
      # decide what strategy to use when updating a dictionary
      # with the values from another: {(non)recursive} x {(non)overwriting}
      deep = kwargs['deep']
      overwrite = kwargs['overwrite']
      if deep:
          dict_update = curry(_recursive_dict_update, overwrite=overwrite)
      else:
          if overwrite:
              dict_update = res.__class__.update
          else:
              def dict_update(dict_, other):
                  for k, v in iteritems(other):
                      dict_.setdefault(k, v)
  
      for d in dicts[1:]:
          dict_update(res, d)
      return res
docs: Implementation of n-argument ``dict.update``,
      with flags controlling the exact strategy.