> Какие типы данных существуют в Python (Python)
Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы
Компании: ProFinansy, ООО Диджитал Сектор Поддержка, Домклик, АО НПФ Будущее, GGSel, IPChain, Фабрика решений, Сбер, Исходный Код, Sunlight, ARX, Московский метрополитен, Angie
Стек: Python
> Пример ответа
Короткий ответ
В Python типы данных делятся на изменяемые (mutable) и неизменяемые (immutable). Основные категории: числа (int, float, complex), строки (str), последовательности (list, tuple, range), множества (set, frozenset), словари (dict) и специальные типы (NoneType, bool, bytes, bytearray). Ключевое различие - поведение при присваивании и передаче в функции: неизменяемые копируются по значению, изменяемые - по ссылке.
Подробное объяснение
В Python всё является объектом, и тип данных определяет набор операций и поведение объекта. Классификация по изменяемости - фундаментальна для понимания памяти и производительности.
Неизменяемые (immutable): после создания объект нельзя модифицировать. Любая операция, которая "меняет" значение, создаёт новый объект. К ним относятся:
int,float,complex- числаstr- строкиtuple- кортежиfrozenset- неизменяемые множестваbytes- байтовые строкиbool- подклассintNoneType- единственный объектNone
Изменяемые (mutable): объект можно модифицировать in-place, не создавая новый. К ним относятся:
list- спискиdict- словариset- множестваbytearray- изменяемые байты
Дополнительные категории:
range- неизменяемая последовательность, лениво вычисляемаяmemoryview- представление буфера памяти
Важно: str - это последовательность символов, но в отличие от list, она неизменяема. Это сделано для оптимизации хеширования и безопасного использования в качестве ключей словаря.
На практике
Для backend-разработки критично понимать:
- Хешируемость: только неизменяемые типы могут быть ключами
dictи элементамиset. Попытка использоватьlistкак ключ вызоветTypeError. - Копирование: при передаче изменяемого объекта в функцию, изменения внутри функции влияют на оригинал. Для защиты используйте
copy.deepcopy()или создавайте новые объекты. - Производительность: операции с неизменяемыми типами часто быстрее для чтения, но дороже для "изменения" (создание нового объекта). Изменяемые типы эффективнее для частых модификаций.
- Память:
tupleзанимает меньше памяти, чемlistс теми же элементами, и может использоваться как оптимизация для фиксированных структур.
Пример кода
PYTHON# Неизменяемые типыs = "hello"# s[0] = "H" # TypeError: 'str' object does not support item assignmentt = (1, 2, 3)# t[0] = 10 # TypeError# Изменяемые типыlst = [1, 2, 3]lst[0] = 10 # OKd = {"key": "value"}d["new"] = 1 # OK# Хешируемостьhash("string") # OK# hash([1, 2]) # TypeError: unhashable type: 'list'# Передача в функциюdef modify_list(data):data.append(100)original = [1, 2]modify_list(original)print(original) # [1, 2, 100] - оригинал изменёнdef modify_str(data):data += " world"text = "hello"modify_str(text)print(text) # "hello" - оригинал не изменён
Как отвечать на собеседовании
Начните с краткой классификации: неизменяемые и изменяемые. Затем перечислите основные типы в каждой группе. Упомяните bool как подкласс int и NoneType как отдельный тип. Подчеркните практические следствия: хешируемость, копирование, производительность. Если спросят про range - отметьте, что это ленивая последовательность, а не список. Для senior-уровня добавьте рассуждение о внутреннем представлении: например, int в Python - произвольной точности, а str хранится как массив Unicode-символов.
Что проверяет интервьюер
Интервьюер оценивает:
- Понимание фундаментального различия mutable/immutable, а не просто заучивание списка
- Умение связать типы с практическими последствиями (хеширование, передача в функции)
- Знание edge cases:
boolкакint,frozensetкак неизменяемый аналогset - Способность объяснить, почему
strнеизменяем (безопасность, хеширование, интернирование) - Понимание памяти и производительности: почему
tupleлегчеlist, когда использоватьbytearray
Типичные ошибки
- Путаница между
tupleиlist: кортеж неизменяем, но может содержать изменяемые элементы (например,tupleсо списком внутри) - Утверждение, что
range- это список: на самом деле это отдельный тип с ленивым вычислением - Забывают про
frozenset,bytes,bytearray,memoryview - Неверное утверждение, что
str- изменяемый тип (в некоторых языках строки изменяемы) - Игнорирование того, что
None- это объект типаNoneType, а не "отсутствие типа" - Смешение понятий "тип" и "класс": в Python это одно и то же, но интервьюер может проверить понимание
type()vsisinstance()
> Похожие задачи по Python
Что такое bottleneck
Что такое декоратор в Python и для чего он используется?
В чем разница синхронности и асинхронности в Python
В чем разница между select_related и prefetch_related в Django ORM?
> Похожие задачи по backend
Что такое bottleneck
Что такое декоратор в Python и для чего он используется?
В чем разница синхронности и асинхронности в Python
В чем разница между select_related и prefetch_related в Django ORM?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью