Advanced Tuple Concepts
Beyond their role as simple containers, tuples unlock powerful and efficient programming patterns in Python, largely thanks to their immutability.
1. Immutability and Hashability
A key feature of tuples is that they are hashable, provided all their elements are also hashable (e.g., strings, numbers, other tuples). This allows you to use tuples as dictionary keys or add them to sets—something you cannot do with lists.
A tuple of numbers can be used as a dictionary key to map a coordinate to a location name.
Pyground
Use a (latitude, longitude) tuple as a dictionary key.
Expected Output:
The location is New York City.
Output:
2. Creating Readable Records
While unpacking is useful, accessing elements by index (e.g., record[0]
) can make code hard to read. Python provides several ways to create tuple-like objects with named fields.
collections.namedtuple
This is the classic factory function for creating simple, lightweight, immutable records. It returns a new tuple subclass with named fields.
Pyground
Define a 'Car' named tuple and access its fields by name.
Expected Output:
Make: Toyota Model: Camry Year (by index): 2022
Output:
3. Performance and Memory
Tuples are slightly more memory-efficient than lists. This is because lists are over-allocated to make append()
operations fast, while tuples have a fixed size.
Pyground
Compare the memory size of a tuple and a list with the same elements.
Expected Output:
Size of tuple: 80 bytes Size of list: 120 bytes
Output:
Note: The exact sizes can vary between Python versions and system architecture. The key takeaway is that lists reserve extra space. This difference is usually only significant when creating a very large number of objects.
4. Tuples in the Python Ecosystem
Tuples are a core part of many standard libraries and programming patterns.
Composite Sort Keys
Because tuples are compared lexicographically, they are perfect for creating composite sort keys. The sorted()
function will use the first element of the tuple to sort, then the second as a tie-breaker, and so on.
Pyground
Sort a list of students first by grade (descending), then by name (ascending).
Expected Output:
[('Bob', 'A'), ('Alice', 'B'), ('Charlie', 'B')]