← Назад к вопросам
В чем разница между картежем и списком в Python?
1.2 Junior🔥 121 комментариев
#Python
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между картежем (tuple) и списком (list) в Python
Основное различие: Изменяемость
Список (list) — это изменяемая (mutable) структура данных. Вы можете добавлять, удалять и изменять элементы после создания.
Картеж (tuple) — это неизменяемая (immutable) структура данных. После создания вы не можете изменить его содержимое.
Это фундаментальное различие определяет все остальные характеристики и область использования.
Синтаксис и создание
# Список — квадратные скобки
my_list = [1, 2, 3, "apple"]
my_list[0] = 99 # ✅ Работает
my_list.append(4) # ✅ Работает
# Картеж — круглые скобки
my_tuple = (1, 2, 3, "apple")
my_tuple[0] = 99 # ❌ TypeError: tuple does not support item assignment
my_tuple.append(4) # ❌ AttributeError: tuple has no attribute append
# Сингл-элементный картеж требует запятую
single_tuple = (42,) # Картеж с одним элементом
single_value = (42) # Это просто число в скобках!
Методы и операции
Список имеет много методов:
my_list = [3, 1, 2]
my_list.append(4) # Добавить элемент
my_list.remove(2) # Удалить элемент
my_list.sort() # Отсортировать
my_list.reverse() # Реверс
my_list.extend([5, 6]) # Расширить
my_list.pop() # Удалить последний
Картеж имеет минимум методов:
my_tuple = (3, 1, 2, 1)
count = my_tuple.count(1) # Сколько раз встречается элемент
index = my_tuple.index(2) # Индекс первого вхождения
# Больше ничего! Это сделано намеренно.
Производительность
Картеж быстрее:
import timeit
# Картеж создается быстрее
print(timeit.timeit("(1, 2, 3, 4, 5)", number=1000000))
# Результат: ~0.04 сек
# Список создается медленнее
print(timeit.timeit("[1, 2, 3, 4, 5]", number=1000000))
# Результат: ~0.06 сек
# Доступ к элементу одинаков
my_tuple = (1, 2, 3) * 1000
my_list = [1, 2, 3] * 1000
# Скорость доступа одинакова
Использование в качестве ключей
Картеж можно использовать как ключ словаря (hashable):
# ✅ Картеж — hashable
coords = {(10, 20): "точка A", (30, 40): "точка B"}
print(coords[(10, 20)]) # точка A
set_of_positions = {(1, 1), (2, 2), (3, 3)} # Картежи в set
# ❌ Список нельзя использовать как ключ
positions = {[1, 1]: "point"} # TypeError: unhashable type: list
Когда использовать что
Используйте СПИСОК когда:
- Нужно изменять данные (добавлять, удалять, менять элементы)
- Работаете с коллекциями, которые растут
- Нужны методы сортировки, фильтрации, трансформации
Используйте КАРТЕЖ когда:
- Данные не должны меняться (защита от ошибок)
- Используете картеж как ключ словаря
- Возвращаете несколько значений из функции
- Работаете с константными данными
- Нужна максимальная производительность
Примеры в контексте тестирования
# Возврат нескольких значений — картеж
def get_test_credentials():
return ("user@test.com", "password123")
email, password = get_test_credentials() # Распаковка картежа
# Набор предустановленных тестовых данных
test_data = (
("valid_email@test.com", True),
("invalid_email", False),
("", False),
)
for email, expected_result in test_data:
result = validate_email(email)
assert result == expected_result
# Кэш статус-кодов
status_codes = {
(200,): "OK",
(201,): "Created",
(400,): "Bad Request",
}
Резюме таблица
| Характеристика | Список | Картеж |
|---|---|---|
| Синтаксис | [1, 2, 3] | (1, 2, 3) |
| Изменяемость | Mutable | Immutable |
| Производительность | Медленнее | Быстрее |
| Hashable | Нет | Да |
| Методов | Много | Мало |
| Как ключ dict | Нет | Да |
| Безопасность | Менее безопасен | Более безопасен |
| Распаковка | a, b = list | a, b = tuple |
Выбирайте листы для гибкости, картежи для надежности и производительности.