code: def copy(self, name=None):
          r
          if name is None:
              name = ws._gen_name()
          proj = deepcopy(self)
          ws[name] = proj
          return proj
docs: r"""
          Creates a deep copy of the current project
  
          A deep copy means that new, unique versions of all the objects are
          created but with identical data and properties.
  
          Parameters
          ----------
          name : string
              The name to give to the new project.  If not supplied, a name
              is automatically generated.
  
          Returns
          -------
          A new Project object containing copies of all objects