# 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)