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