Ответ
Кортеж (tuple
) занимает меньше памяти, чем список (list
) с теми же элементами, из-за ключевого различия: неизменяемости (immutability).
Это приводит к разным стратегиям выделения памяти:
-
Список (
list
) — изменяемый (mutable). Python выделяет для него память с запасом (over-allocates), чтобы операции добавления элементов, такие какappend()
, выполнялись эффективно (в среднем за O(1)) без необходимости каждый раз перераспределять память. -
Кортеж (
tuple
) — неизменяемый (immutable). Поскольку его размер и содержимое не могут измениться после создания, Python выделяет ровно столько памяти, сколько необходимо для хранения его элементов. Никакого дополнительного пространства не требуется.
Пример сравнения
Разницу можно увидеть с помощью функции sys.getsizeof()
:
import sys
my_list = [1, 2, 3, 4, 5]
my_tuple = (1, 2, 3, 4, 5)
print(f"Размер списка: {sys.getsizeof(my_list)} байт")
# Вывод (примерный): Размер списка: 120 байт
print(f"Размер кортежа: {sys.getsizeof(my_tuple)} байт")
# Вывод (примерный): Размер кортежа: 80 байт
Вывод: Используйте кортежи для коллекций данных, которые не должны изменяться. Это не только безопаснее, но и эффективнее с точки зрения потребления памяти.