Ответ
Ключевое различие между 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)]) # -> Токио