- PyTuple_Check
int PyTuple_Check(PyObject* op)
 - PyTuple_CheckExact
int PyTuple_CheckExact(PyObject* op)
 - PyTuple_ClearFreeList
int PyTuple_ClearFreeList()
 - PyTuple_GET_ITEM
PyObject_BorrowedRef* PyTuple_GET_ITEM(PyObject* op, Py_ssize_t i)
 - PyTuple_GET_SIZE
size_t PyTuple_GET_SIZE(PyObject* op)
 - PyTuple_GetItem
PyObject_BorrowedRef* PyTuple_GetItem(PyObject*, Py_ssize_t)
 - PyTuple_GetSlice
PyObject* PyTuple_GetSlice(PyObject*, Py_ssize_t, Py_ssize_t)
 - PyTuple_New
PyObject* PyTuple_New(Py_ssize_t size)
 - PyTuple_Pack
PyObject* PyTuple_Pack(Py_ssize_t, ...)
 - PyTuple_SET_ITEM
PyObject* PyTuple_SET_ITEM(PyObject* op, Py_ssize_t i, PyObject* v)
 - PyTuple_SetItem
int PyTuple_SetItem(PyObject*, Py_ssize_t, PyObject*)
 - PyTuple_Size
Py_ssize_t PyTuple_Size(PyObject*)
 - _PyTuple_DebugMallocStats
void _PyTuple_DebugMallocStats(FILE* out_)
 - _PyTuple_Resize
int _PyTuple_Resize(PyObject**, Py_ssize_t)
 
Mirror tupleobject.h
Another generally useful object type is a tuple of object pointers. For Python, this is an immutable type. C code can change the tuple items (but not their number), and even use tuples are general-purpose arrays of object references, but in general only brand new tuples should be mutated, not ones that might already have been exposed to Python code.