code: def duplicate_sheet(
          self,
          source_sheet_id,
          insert_sheet_index=None,
          new_sheet_id=None,
          new_sheet_name=None
      ):
          
          body = {
              'requests': [{
                  'duplicateSheet': {
                      'sourceSheetId': source_sheet_id,
                      'insertSheetIndex': insert_sheet_index,
                      'newSheetId': new_sheet_id,
                      'newSheetName': new_sheet_name
                  }
              }]
          }
  
          data = self.batch_update(body)
  
          properties = data['replies'][0]['duplicateSheet']['properties']
  
          worksheet = Worksheet(self, properties)
  
          return worksheet
docs: Duplicates the contents of a sheet.
  
          :param int source_sheet_id: The sheet ID to duplicate.
          :param int insert_sheet_index: (optional) The zero-based index
                                         where the new sheet should be inserted.
                                         The index of all sheets after this are
                                         incremented.
          :param int new_sheet_id: (optional) The ID of the new sheet.
                                   If not set, an ID is chosen. If set, the ID
                                   must not conflict with any existing sheet ID.
                                   If set, it must be non-negative.
          :param str new_sheet_name: (optional) The name of the new sheet.
                                     If empty, a new name is chosen for you.
  
          :returns: a newly created :class:`<gspread.models.Worksheet>`.
  
          .. versionadded:: 3.1.0