code: def merge(self, b, a=DEFAULT):
          
          if a is DEFAULT:
              a = self
          for key in b:
              if key in a:
                  if isinstance(a[key], dict) and isinstance(b[key], dict):
                      self.merge(b[key], a[key])
                  else:
                      if type(a[key]) is list and type(b[key]) is list:
                          a[key] += b[key]
                      elif type(a[key]) is list and type(b[key]) is not list:
                          a[key] += [b[key]]
                      elif type(a[key]) is not list and type(b[key]) is list:
                          a[key] = [a[key]] + b[key]
                      elif type(a[key]) is not list and type(b[key]) is not list:
                          a[key] = [a[key]] + [b[key]]
              else:
                  a[key] = b[key]
          return a
docs: Merges b into a recursively, if a is not given: merges into self.
  
          also merges lists and:
              * merge({a:a},{a:b}) = {a:[a,b]}
              * merge({a:[a]},{a:b}) = {a:[a,b]}
              * merge({a:a},{a:[b]}) = {a:[a,b]}
              * merge({a:[a]},{a:[b]}) = {a:[a,b]}