В чем ключевые различия между list и tuple в Python и когда какой тип данных выбрать

Ответ

Ключевое различие между list (список) и tuple (кортеж) заключается в изменяемости (mutability).

list (Список)

  • Изменяемый (Mutable): элементы можно добавлять, удалять и изменять после создания.
  • Синтаксис: my_list = [1, 2, 3]
  • Назначение: используется для хранения однородных (одного типа) данных, количество которых может меняться. Например, список пользователей или товаров.

tuple (Кортеж)

  • Неизменяемый (Immutable): после создания кортеж нельзя изменить. Попытка изменить элемент вызовет TypeError.
  • Синтаксис: my_tuple = (1, 2, 3)
  • Назначение: используется для хранения гетерогенных (разных типов) данных, представляющих собой единую структуру. Например, координаты точки (x, y) или запись из базы данных ('John Doe', 30).
  • Преимущества:
    • Работает быстрее, чем list за счет неизменяемости.
    • Может использоваться в качестве ключа словаря, в отличие от списка.

Критерии выбора

Сценарий Рекомендуемый тип Почему?
Коллекция, которая будет изменяться list Требуется гибкость для добавления/удаления элементов.
Хранение фиксированной структуры данных tuple Гарантирует целостность данных (защита от изменений).
Ключи для словаря (dict) tuple Ключи словаря должны быть хешируемыми и неизменяемыми.
Возврат нескольких значений из функции tuple Это стандартная идиома Python для группировки возвращаемых значений.

Пример:

# Список для динамической коллекции
users = ['Alice', 'Bob']
users.append('Charlie') # OK
print(users) # -> ['Alice', 'Bob', 'Charlie']

# Кортеж для неизменяемой структуры (координаты)
point = (10, 20)
# point[0] = 15 # Вызовет TypeError: 'tuple' object does not support item assignment

# Кортеж как ключ словаря
locations = {
    (35.68, 139.69): "Токио",
    (40.71, -74.00): "Нью-Йорк"
}
print(locations[(35.68, 139.69)]) # -> Токио