code: def _update_with_merge(self, other, key, val=None, merge_lists=False,
                         **options):
      
      if val is None:
          val = other[key]
  
      if key in self:
          val0 = self[key]  # Original value
          if anyconfig.utils.is_dict_like(val0):  # It needs recursive updates.
              merge(self[key], val, merge_lists=merge_lists, **options)
          elif merge_lists and _are_list_like(val, val0):
              _merge_list(self, key, val)
          else:
              _merge_other(self, key, val)
      else:
          self[key] = val
docs: Merge the value of self with other's recursively. Behavior of merge will be
      vary depends on types of original and new values.
  
      - mapping vs. mapping -> merge recursively
      - list vs. list -> vary depends on 'merge_lists'. see its description.
  
      :param other: a dict[-like] object or a list of (key, value) tuples
      :param key: key of mapping object to update
      :param val: value to update self[key]
      :param merge_lists:
          Merge not only dicts but also lists. For example,
  
          [1, 2, 3], [3, 4] ==> [1, 2, 3, 4]
          [1, 2, 2], [2, 4] ==> [1, 2, 2, 4]
  
      :return: None but 'self' will be updated