A tuple is an ordered collection that should not be changed after it is created.
Use tuples for fixed groups of related values, function returns, coordinates, records, and data that should stay stable.
The main tuple skill is knowing when immutability protects your program and when a mutable list would be easier.
A tuple is an ordered, immutable collection. Once created, you cannot change, add, or remove items. Tuples are faster than lists and are used for data that shouldn't change.
empty = ()
single = (42,) # trailing comma required for single-item tuple
single2 = 42, # parentheses optional
coords = (10.5, 20.3)
colors = ("red", "green", "blue")
mixed = (1, "hello", 3.14, True)
nested = ((1, 2), (3, 4), (5, 6))
# From other iterables
from_list = tuple([1, 2, 3])
from_str = tuple("abc") # ('a', 'b', 'c')
from_range = tuple(range(5)) # (0, 1, 2, 3, 4)
print(type(coords)) # <class 'tuple'>
print(len(colors)) # 3
colors = ("red", "green", "blue", "yellow", "purple")
print(colors[0]) # red
print(colors[-1]) # purple
print(colors[1:3]) # ('green', 'blue')
print(colors[::-1]) # reversed tuple
# Nested tuple access
matrix = ((1, 2, 3), (4, 5, 6))
print(matrix[1][2]) # 6
# Unpacking
x, y, z = (10, 20, 30)
print(x, y, z) # 10 20 30
# Extended unpacking
first, *rest = (1, 2, 3, 4, 5)
print(first) # 1
print(rest) # [2, 3, 4, 5]
*start, last = (1, 2, 3, 4, 5)
print(start) # [1, 2, 3, 4]
print(last) # 5
Tuples only have two methods since they're immutable.
| Method | Description |
|---|---|
| count(x) | Returns number of times x appears |
| index(x) | Returns index of first occurrence of x |
nums = (3, 1, 4, 1, 5, 9, 2, 6, 1)
print(nums.count(1)) # 3
print(nums.index(5)) # 4
# Concatenation and repetition
a = (1, 2, 3)
b = (4, 5, 6)
print(a + b) # (1, 2, 3, 4, 5, 6)
print(a * 3) # (1, 2, 3, 1, 2, 3, 1, 2, 3)
# Membership
print(5 in nums) # True
print(7 not in nums) # True
# Iteration
for color in ("red", "green", "blue"):
print(color)
# Convert to list to modify, then back
t = (1, 2, 3)
lst = list(t)
lst.append(4)
t = tuple(lst)
print(t) # (1, 2, 3, 4)
| Feature | Tuple | List |
|---|---|---|
| Mutability | Immutable | Mutable |
| Syntax | (1, 2, 3) | [1, 2, 3] |
| Performance | Faster | Slower |
| Dict key | Yes | No |
| Use case | Fixed data (coordinates, RGB, DB rows) | Dynamic collections |
# Return multiple values from a function
def min_max(numbers):
return min(numbers), max(numbers)
low, high = min_max([3, 1, 4, 1, 5, 9])
print(low, high) # 1 9
# Tuple as dict key (lists can't be keys)
locations = {
(40.7128, -74.0060): "New York",
(51.5074, -0.1278): "London",
}
print(locations[(40.7128, -74.0060)]) # New York
# Named tuple - readable tuple with field names
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
p = Point(3, 4)
print(p.x, p.y) # 3 4
print(p[0], p[1]) # 3 4 (still indexable)
0 of 2 checked
Try this next
0 of 3 completed
Use a tuple when the group should stay fixed, such as coordinates, RGB values, database rows, or a function returning multiple values.
Yes. The tuple cannot replace that list item, but the list inside can still be changed because the list itself is mutable.
Parentheses alone are grouping. A one-item tuple needs a comma: one_item = (5,).
Explore 500+ free tutorials across 20+ languages and frameworks.