# Tuple [[Immutability|Immutable]] [[Seq - Sequence|sequence]] of [[Object|objects]]. ## CPython-Specific ### Implementation of Tuples Overview of a tuple in [[CPython]]: ![[cpython-tuple_details.jpg]] #### Overview of `ob_item` At the core of a [[Python]] tuple lies the `ob_item` field, which is a fixed-sized [[Fields/Development/Programming Languages/Glossary/Array|C array]] of [[Pointer|pointers]] to `PyObjects`. Its size is defined at the tuple creation and can't change, and it contains pointers to all the items of the tuple. A tuple is immutable because once it's created, its size or its items (in its `ob_item`) can't be changed. So, if you concatenate 2 tuples, a new `PyTupleObject` will be created, with a new `ob_item`. You can't mutate a tuple, but mutable objects inside a tuple can be mutated. If you have a tuple with a list inside, Even if you can't alter the `ob_item` of it, you can alter the `ob_item` of the list inside (referred by the tuple). In this way, `ob_item` of the list has changed, but the `ob_item` is unchanged. --- Bibliography: - [Title - website.com](need bibliography)