code: def copy(self: BoardT, *, stack: Union[bool, int] = True) -> BoardT:
          
          board = super().copy()
  
          board.chess960 = self.chess960
  
          board.ep_square = self.ep_square
          board.castling_rights = self.castling_rights
          board.turn = self.turn
          board.fullmove_number = self.fullmove_number
          board.halfmove_clock = self.halfmove_clock
  
          if stack:
              stack = len(self.move_stack) if stack is True else stack
              board.move_stack = [copy.copy(move) for move in self.move_stack[-stack:]]
              board._stack = self._stack[-stack:]
  
          return board
docs: Creates a copy of the board.
  
          Defaults to copying the entire move stack. Alternatively, *stack* can
          be ``False``, or an integer to copy a limited number of moves.