Назад к вопросам
Junior
65
questionbank

Что быстрее: списки или кортежи?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Кортежи быстрее списков. Это связано с тем, что кортежи являются неизменяемыми (immutable), в то время как списки изменяемы (mutable). Неизменяемость позволяет Python оптимизировать выполнение операций над кортежами, так как их содержимое не может быть изменено.

Основные причины разницы в скорости:

  • Фиксированный размер: Кортежи имеют фиксированный размер после создания, что упрощает управление памятью.
  • Оптимизация хеширования: В отличие от списков, кортежи могут использоваться в качестве ключей словаря, поскольку они хешируемые (если все их элементы хешируемые), что требует меньших накладных расходов на операции поиска.
  • Меньшее потребление памяти: Кортежи, как правило, занимают меньше памяти по сравнению со списками того же размера из-за отсутствия необходимости в выделении дополнительной памяти для потенциального изменения размера.

Несмотря на то, что для небольших коллекций разница в скорости может быть незначительной, при работе с большими объемами данных или в операциях, чувствительных ко времени выполнения, использование кортежей там, где это возможно, может дать заметное преимущество.

Пример: замеры скорости создания и итерации

import timeit

# Время создания списка и кортежа
list_creation_time = timeit.timeit(stmt='[1, 2, 3, 4, 5]', number=1000000)
tuple_creation_time = timeit.timeit(stmt='(1, 2, 3, 4, 5)', number=1000000)

print(f"Время создания списка: {list_creation_time:.6f} секунд")
print(f"Время создания кортежа: {tuple_creation_time:.6f} секунд")

# Время итерации по списку и кортежу
list_iteration_time = timeit.timeit(stmt='for i in [1, 2, 3, 4, 5]: pass', number=1000000)
tuple_iteration_time = timeit.timeit(stmt='for i in (1, 2, 3, 4, 5): pass', number=1000000)

print(f"Время итерации по списку: {list_iteration_time:.6f} секунд")
print(f"Время итерации по кортежу: {tuple_iteration_time:.6f} секунд")
# Комментарий: Результаты могут незначительно различаться при каждом запуске

Как правило, время создания и итерации для кортежей оказывается немного меньше.

Таким образом, для случаев, где коллекция данных не требует изменений после создания, использование кортежей является более производительным вариантом.