code: def partition_varied_cfg_list(cfg_list, default_cfg=None, recursive=False):
      r
      import utool as ut
      if default_cfg is None:
          nonvaried_cfg = reduce(ut.dict_intersection, cfg_list)
      else:
          nonvaried_cfg = reduce(ut.dict_intersection, [default_cfg] + cfg_list)
      nonvaried_keys = list(nonvaried_cfg.keys())
      varied_cfg_list = [
          ut.delete_dict_keys(cfg.copy(), nonvaried_keys)
          for cfg in cfg_list]
      if recursive:
          varied_keys = list(set([key for cfg in varied_cfg_list for key in cfg]))
          varied_vals_list = [[cfg[key] for cfg in varied_cfg_list if key in cfg] for key in varied_keys]
          for key, varied_vals in zip(varied_keys, varied_vals_list):
              if len(varied_vals) == len(cfg_list):
                  if all([isinstance(val, dict) for val in varied_vals]):
                      nonvaried_subdict, varied_subdicts = partition_varied_cfg_list(varied_vals, recursive=recursive)
                      nonvaried_cfg[key] = nonvaried_subdict
                      for cfg, subdict in zip(varied_cfg_list, varied_subdicts):
                          cfg[key] = subdict
      return nonvaried_cfg, varied_cfg_list