← Назад к вопросам

В чем разница между списком и кортежем в 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% выше.