code: def recur(obj, type_func_tuple_list=()):
      '''recuring dealing an object'''
      for obj_type, func in type_func_tuple_list:
          if type(obj) == type(obj_type):
              return func(obj)
      # by default, we wolud recurring list, tuple and dict
      if isinstance(obj, list) or isinstance(obj, tuple):
          n_obj = []
          for i in obj:
              n_obj.append(recur(i))
          return n_obj if isinstance(obj, list) else tuple(obj)
      elif isinstance(obj, dict):
          n_obj = {}
          for k,v in obj.items():
              n_obj[k] = recur(v)
          return n_obj
      return obf recur(obj, type_func_tuple_list=()):
      '''recuring dealing an object'''
      for obj_type, func in type_func_tuple_list:
          if type(obj) == type(obj_type):
              return func(obj)
      # by default, we wolud recurring list, tuple and dict
      if isinstance(obj, list) or isinstance(obj, tuple):
          n_obj = []
          for i in obj:
              n_obj.append(recur(i))
          return n_obj if isinstance(obj, list) else tuple(obj)
      elif isinstance(obj, dict):
          n_obj = {}
          for k,v in obj.items():
              n_obj[k] = recur(v)
          return n_obj
      return obj
docs: recuring dealing an object