← Назад к вопросам
В чем разница между списком и кортежем в Python?
1.0 Junior🔥 221 комментариев
#Python
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Различие между списком и кортежем в Python
Определение
- Список (List) — mutable (изменяемый) контейнер
- Кортеж (Tuple) — immutable (неизменяемый) контейнер
Синтаксис
# Список
my_list = [1, 2, 3, 'hello']
my_list = list([1, 2, 3])
# Кортеж
my_tuple = (1, 2, 3, 'hello')
my_tuple = tuple([1, 2, 3])
my_tuple = 1, 2, 3 # скобки опциональны
# Одноэлементный кортеж требует запятую!
single = (1,) # кортеж
single = (1) # просто число
Основные различия
| Свойство | Список | Кортеж |
|---|---|---|
| Изменяемость | Можно менять | Нельзя менять |
| Синтаксис | [1, 2, 3] | (1, 2, 3) |
| Методы добавления | append, extend, insert | Отсутствуют |
| Методы удаления | remove, pop, clear | Отсутствуют |
| Скорость | Медленнее | Быстрее (оптимизирован) |
| Память | Больше | Меньше |
| Хешируемость | Нет (нельзя как ключ dict) | Да (если содержит неизменяемые) |
| Способность пакования | Нет | Да (unpacking) |
Примеры использования
# СПИСКИ — для изменяемых данных
my_list = [1, 2, 3]
# Изменение элемента
my_list[0] = 100
print(my_list) # [100, 2, 3]
# Добавление
my_list.append(4)
my_list.extend([5, 6])
print(my_list) # [100, 2, 3, 4, 5, 6]
# Удаление
my_list.pop() # удалит последний
my_list.remove(2) # удалит первый элемент 2
print(my_list) # [100, 3, 4, 5]
# КОРТЕЖИ — для неизменяемых данных
my_tuple = (1, 2, 3)
# ✗ Это вызовет ошибку
my_tuple[0] = 100 # TypeError: 'tuple' object does not support item assignment
my_tuple.append(4) # AttributeError: 'tuple' object has no attribute 'append'
# ✓ Но функции работают
len(my_tuple) # 3
my_tuple.count(2) # 1
my_tuple.index(2) # 1
Распаковка (Unpacking) — только кортежи
# Кортежи
a, b, c = (1, 2, 3)
print(a, b, c) # 1 2 3
# Функции возвращают кортежи
def get_coords():
return 10, 20 # неявный кортеж
x, y = get_coords() # распаковка
print(x, y) # 10 20
# Swap
x, y = y, x
Кортежи как ключи словаря
# Кортежи хешируемы — подходят как ключи
locations = {}
locations[(10, 20)] = "City A"
locations[(30, 40)] = "City B"
print(locations[(10, 20)]) # City A
# Списки нельзя использовать как ключи
data = {}
data[[1, 2, 3]] = "value" # TypeError: unhashable type: 'list'
Производительность
import timeit
# Кортежи создаются быстрее
print(timeit.timeit('(1, 2, 3)', number=1000000))
# 0.041 ms
print(timeit.timeit('[1, 2, 3]', number=1000000))
# 0.062 ms
# Кортежи занимают меньше памяти
import sys
print(sys.getsizeof([1, 2, 3])) # 56 bytes
print(sys.getsizeof((1, 2, 3))) # 48 bytes
Когда использовать
Список:
- Динамические данные (будут меняться)
- Коллекции элементов одного типа
- Когда нужны методы: append, remove, sort
- Возвращение переменного числа элементов:
return [results]
Кортеж:
- Защита от изменений (константные данные)
- Координаты, RGB:
(x, y),(255, 0, 0) - Ключи словаря:
{(lat, lon): city} - Возвращение фиксированного числа значений:
return x, y - Распаковка:
a, b = func() - Быстродействие критично
Вывод
Список = изменяемый, гибкий, медленнее Кортеж = неизменяемый, быстрый, хешируемый
Выбирай кортеж, когда данные не должны меняться. Это 10-20% экономия памяти и скорость до 50% выше.