Типы данных в Python: строки, числа, списки и словари
С чего начать работу с базовыми типами Python 3.12: как ведут себя строки, числа, списки и словари, где новичок спотыкается и как проверить, что всё работает.

За полчаса вы разберётесь с четырьмя типами данных, из которых состоит почти любая программа на Python: строкой, числом, списком и словарём. К концу вы будете понимать, почему "2" + "2" даёт "22", а не 4, почему список меняется «сам собой» после присваивания и когда вместо списка нужен словарь. Всё проверено на Python 3.12, но примеры работают начиная с 3.6.
Что нужно до начала
Для повторения примеров хватит любого Python версии 3.6 и выше. Проверьте, что он установлен:
python --version
# Должно вывести что-то вроде: Python 3.12.1
Если команда не найдена, попробуйте python3 --version — на Linux и macOS Python 3 часто доступен именно под этим именем. Все примеры ниже можно вводить прямо в интерактивной консоли: запустите python без аргументов и вводите строки после приглашения >>>.
Как узнать тип любого значения
Первый инструмент, который пригодится на каждом шаге, — функция type(). Она отвечает на вопрос «что это за значение».
>>> type(42)
<class 'int'>
>>> type("привет")
<class 'str'>
>>> type([1, 2, 3])
<class 'list'>
>>> type({"ключ": "значение"})
<class 'dict'>
Проверка: если после ввода вы видите строки <class 'int'> и подобные — консоль работает, можно двигаться дальше.
Шаг 1. Числа: int и float
В Python два основных числовых типа: int — целые числа без ограничения по величине, и float — числа с дробной частью.
>>> количество = 10
>>> цена = 199.90
>>> type(количество)
<class 'int'>
>>> type(цена)
<class 'float'>
>>> количество * цена
1999.0
Как только в вычислении появляется хотя бы одно float, результат становится float — поэтому 1999.0, а не 1999.
Две операции деления, которые путают новичков:
/— обычное деление, всегда даётfloat:7 / 2вернёт3.5;//— целочисленное деление, отбрасывает дробь:7 // 2вернёт3;%— остаток от деления:7 % 2вернёт1.
Проверка: введите 7 / 2 и 7 // 2 — если результаты 3.5 и 3, вы поняли разницу.
Осторожно с дробями
Из-за того, как компьютер хранит float, привычная арифметика иногда даёт неожиданный результат:
>>> 0.1 + 0.2
0.30000000000000004
Это не баг Python, а особенность двоичного представления дробей1. Для денег используйте модуль decimal из стандартной библиотеки — это отдельная тема, здесь только отмечаем, что для рублей и копеек float не подходит.
Шаг 2. Строки: str
Строка — это текст в кавычках. Двойные и одинарные кавычки равноправны.
>>> имя = "Анна"
>>> фамилия = 'Петрова'
>>> имя + " " + фамилия
'Анна Петрова'
Знак + для строк — это склеивание, а не сложение. Именно поэтому "2" + "2" даёт "22". Чтобы сложить числа, введённые как текст, их сначала нужно превратить в int:
>>> int("2") + int("2")
4
Обратное превращение — функцией str(). Она нужна, когда вы хотите вставить число в текст без ошибки:
>>> возраст = 30
>>> "Мне " + str(возраст) + " лет"
'Мне 30 лет'
f-строки: удобная вставка значений
Вместо ручного склеивания через str() с версии Python 3.6 есть f-строки — буква f перед кавычкой позволяет вставлять значения прямо в фигурных скобках:
>>> возраст = 30
>>> f"Мне {возраст} лет"
'Мне 30 лет'
Проверка: если строка собралась с подставленным числом, а не с текстом {возраст} — f-строка сработала.
Полезные операции над строкой:
len("Анна")— длина, вернёт4;"АННА".lower()— в нижний регистр, вернёт'анна';" текст ".strip()— убрать пробелы по краям, вернёт'текст';"а,б,в".split(",")— разбить по разделителю, вернёт список['а', 'б', 'в'].
Шаг 3. Списки: list
Список — упорядоченный набор значений в квадратных скобках. В нём может быть что угодно, включая другие списки.
>>> покупки = ["хлеб", "молоко", "яйца"]
>>> покупки[0]
'хлеб'
>>> покупки[-1]
'яйца'
Нумерация начинается с нуля: первый элемент — [0]. Индекс -1 берёт последний элемент, -2 — предпоследний.
Список можно менять после создания:
>>> покупки.append("сыр") # добавить в конец
>>> покупки
['хлеб', 'молоко', 'яйца', 'сыр']
>>> покупки.remove("молоко") # удалить по значению
>>> покупки
['хлеб', 'яйца', 'сыр']
Проверка: после append длина списка выросла на один — len(покупки) покажет это.
Ловушка: список — это ссылка
Самая частая ошибка новичка. Когда вы присваиваете список другой переменной, копии не создаётся — обе переменные указывают на один и тот же список:
>>> список_а = [1, 2, 3]
>>> список_б = список_а
>>> список_б.append(4)
>>> список_а
[1, 2, 3, 4] # изменился, хотя трогали список_б
Чтобы получить независимую копию, используйте .copy() или срез [:]:
>>> список_б = список_а.copy()
Число можно передавать спокойно — при присваивании оно копируется. Список, словарь и другие изменяемые типы передаются по ссылке. Это различие — источник половины загадочных багов у начинающих.
Шаг 4. Словари: dict
Словарь хранит пары «ключ — значение» в фигурных скобках. Он нужен, когда данные удобнее искать по имени, а не по номеру.
>>> товар = {"название": "Кофе", "цена": 350, "в_наличии": True}
>>> товар["цена"]
350
Добавить или изменить значение — присваиванием по ключу:
>>> товар["цена"] = 320 # изменить существующий
>>> товар["вес"] = "250 г" # добавить новый ключ
>>> товар
{'название': 'Кофе', 'цена': 320, 'в_наличии': True, 'вес': '250 г'}
Если обратиться к несуществующему ключу через квадратные скобки, программа упадёт с ошибкой KeyError. Безопасный способ — метод .get(), который вернёт None или заданное значение по умолчанию:
>>> товар.get("скидка")
# ничего не вывелось — вернулся None
>>> товар.get("скидка", 0)
0
Проверка: товар.get("скидка", 0) вернул 0 без ошибки — вы поняли, зачем нужен .get().
Когда список, а когда словарь
| Задача | Список | Словарь |
|---|---|---|
| Порядок важен | Да, хранит порядок | Порядок вставки сохраняется с 3.7, но искать по нему неудобно |
| Доступ по номеру позиции | список[0] | Не подходит |
| Доступ по имени | Не подходит | словарь["ключ"] |
| Пример данных | Список покупок, очередь | Карточка товара, настройки |
Если не получилось
TypeError: can only concatenate str (not "int") to str— вы попытались сложить строку и число, например"Цена: " + 350. Оберните число вstr()или используйте f-строку.KeyError: 'скидка'— обратились к ключу, которого нет в словаре. Проверьте написание ключа или используйте.get().IndexError: list index out of range— запросили элемент списка по индексу, которого не существует. В списке из трёх элементов допустимы индексы 0, 1, 2 — но не 3.- Список изменился «сам собой» — вы присвоили список другой переменной без
.copy(). Обе переменные указывают на один объект. ValueError: invalid literal for int() with base 10: 'abc'— вы передали вint()текст, который не является числом. Проверьте, что в строке действительно цифры.
Что делать дальше
Вы освоили четыре базовых типа. Следующие шаги, которые логично взять по порядку:
- кортеж (
tuple) и множество (set) — ещё два встроенных типа, близких к списку, но с другими свойствами; - цикл
for— как пройти по всем элементам списка или всем ключам словаря; - модуль
decimalдля денежных расчётов, гдеfloatнепригоден.
Разберитесь с циклом for сразу после типов: без него списки и словари остаются наполовину бесполезными, потому что вручную вы будете обращаться только к отдельным элементам.
1 Двоичное представление дробей — компьютер хранит числа в двоичной системе, где такие дроби, как 0.1, не имеют точного конечного представления, как 1/3 в десятичной. Отсюда мелкие погрешности при сложении дробных чисел.
Проектная работа: От проблемы до защиты: продукт, этапы, вопросы комиссии
Спросить за 15 ₽Источники: Python 3.12 — Built-in Types (официальная документация), Python Tutorial — An Informal Introduction to Python
Частые вопросы
У меня Python 2, примеры работают?
Почему print не выводит результат, как в консоли?
Чем строка отличается от списка символов?
Как проверить, есть ли ключ в словаре, не вызывая ошибку?
Сохраняет ли словарь порядок добавления ключей?
Что быстрее — искать в списке или в словаре?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.