##
7.2.4 Tuple Objects

`PyTupleObject`
  This subtype of `PyObject` represents a Python tuple object.

PyTypeObject `PyTuple_Type`
  This instance of `PyTypeObject` represents the Python tuple type; it is the same object as `types.TupleType` in the Python layer..

int `PyTuple_Check` (PyObject *p)
  Return true if the argument is a tuple object.

PyObject* `PyTuple_New` (int len)
  Return value: New reference.
  Return a new tuple object of size len, or `NULL` on failure.

int `PyTuple_Size` (PyTupleObject *p)
  Takes a pointer to a tuple object, and returns the size of that tuple.

PyObject* `PyTuple_GetItem` (PyTupleObject *p, int pos)
  Return value: Borrowed reference.
  Returns the object at position pos in the tuple pointed to by p. If pos is out of bounds, returns `NULL` and sets an `IndexError` exception.

PyObject* `PyTuple_GET_ITEM` (PyTupleObject *p, int pos)
  Return value: Borrowed reference.
  Does the same, but does no checking of its arguments.

PyObject* `PyTuple_GetSlice` (PyTupleObject *p, int low, int high)
  Return value: New reference.
  Takes a slice of the tuple pointed to by p from low to high and returns it as a new tuple.

int `PyTuple_SetItem` (PyObject *p, int pos, PyObject *o)
  Inserts a reference to object o at position pos of the tuple pointed to by p. It returns `0` on success. Note: This function ``steals'' a reference to o.

void `PyTuple_SET_ITEM` (PyObject *p, int pos, PyObject *o)
  Does the same, but does no error checking, and should only be used to fill in brand new tuples. Note: This function ``steals'' a reference to o.

int `_PyTuple_Resize` (PyTupleObject *p, int newsize, int last_is_sticky)
  Can be used to resize a tuple. newsize will be the new length of the tuple. Because tuples are supposed to be immutable, this should only be used if there is only one reference to the object. Do not use this if the tuple may already be known to some other part of the code. The tuple will always grow or shrink at the end. The last_is_sticky flag is not used and should always be false. Think of this as destroying the old tuple and creating a new one, only more efficiently. Returns `0` on success and `-1` on failure (in which case a `MemoryError` or `SystemError` will be raised).