Глава 11 · Очень много информации!

Зачем хранить много значений

Прежде чем список методов — вопрос «зачем»: одна переменная хранит одно значение, а коллекция хранит их сразу много под одним именем.

Одна переменная — одно значение. А если их пятьсот?

До сих пор каждая переменная хранила одно значение. Представьте, что нужно сохранить оценки пяти учеников:

pyat_peremennyh.py
score_1 = 95
score_2 = 82
score_3 = 91
score_4 = 77
score_5 = 88

Работает. А теперь представьте, что учеников не пять, а пятьсот. Заводить score_1score_500 вручную — не просто долго, а по сути невозможно поддерживать: нельзя пройтись по ним циклом, нельзя посчитать среднее одной строкой, нельзя добавить оценку 501-го ученика без правки кода.

Коллекция: одно имя — много значений

Для этого в Python есть коллекции — типы данных, которые хранят сразу много значений под одним именем:

odin_spisok.py
scores = [95, 82, 91, 77, 88]
print(scores)
scores (список)95индекс 082индекс 191индекс 277индекс 388индекс 4
Одно имя scores указывает на ОДИН объект-коллекцию, который хранит ссылки на пять значений
Коллекция организует ссылки на объекты, а не «складывает предметы в коробку»
Мы уже видели в главе 3, что переменная — это имя, указывающее на объект. Коллекция устроена похоже: scores указывает на один объект-список, а список хранит ссылки на несколько отдельных значений. Подробности внутреннего устройства CPython нам сейчас не нужны — этой картинки достаточно.

Карта коллекций Python

В Python четыре основных встроенных коллекции. Они делятся на три семейства по тому, как устроен доступ к значениям:

МНОГО ЗНАЧЕНИЙ
SEQUENCE — по позиции (индексу)
list — можно изменять
tuple — изменить нельзя
SET — только уникальные значения
set — можно изменять
MAPPING — по ключу
dict — ключ → значение
Три семейства коллекций Python: последовательность (по позиции), множество (уникальность), отображение (по ключу)
Четыре встроенные коллекции — коротко
list
упорядочен
изменяем
повторы разрешены
[1, 2, 2]
tuple
упорядочен
неизменяем
повторы разрешены
(1, 2, 2)
set
без индексов
изменяем
только уникальные
{1, 2}
dict
по ключу
изменяем
ключи уникальны
{"a": 1}

Как выбрать? Пока — ориентир, не закон

Полный разбор выбора структуры будет в §11.22, но уже сейчас полезно иметь общий ориентир:

Какую коллекцию выбрать? (первый ориентир)
Нужна пара «ключ → значение»?
dict
Нужны только уникальные значения, порядок не важен?
set
Нужен порядок, и придётся часто менять содержимое?
list
Нужен порядок, но значения фиксированы раз и навсегда?
tuple
Это правило большого пальца, а не математический закон — из него будут исключения
Практика: превращаем пять переменных в один список
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →