code: def copy(self, extra=None):
          
          if extra is None:
              extra = dict()
          newModel = Params.copy(self, extra)
          newModel.models = [model.copy(extra) for model in self.models]
          return newModel
docs: Creates a copy of this instance with a randomly generated uid
          and some extra params. This creates a deep copy of the embedded paramMap,
          and copies the embedded and extra parameters over.
  
          :param extra: Extra parameters to copy to the new instance
          :return: Copy of this instance