docs: def update(self, *args, **kwargs):
          """ update() method will *recursively* update nested dict:
  
              >>> d=Dict({'a':{'b':{'c':3,'d':4},'h':4}})
              >>> d.update({'a':{'b':{'c':'888'}}})
              >>> d
              {'a': {'b': {'c': '888', 'd': 4}, 'h': 4}}
  
              please use update_dict() if you do not want this behaviour
          """
          for arg in args:
              if not arg:
                  continue
              elif isinstance(arg, dict):
                  for k, v in arg.items():
                      self._update_kv(k, v)
              elif isinstance(arg, (list, tuple)) and (not isinstance(arg[0], (list, tuple))):
                  k = arg[0]
                  v = arg[1]
                  self._update_kv(k, v)
              elif isinstance(arg, (list, tuple)) or isgenerator(arg):
                  for k, v in arg:
                      self._update_kv(k, v)
              else:
                  raise TypeError("update does not understand "
                                  "{0} types".format(type(arg)))
  
          for k, v in kwargs.items():
              self._update_kv(k, v)