> Какие типы данных существуют в Python (Python)
Уровень: middle · Роль: backend · Категория: Технические вопросы
Компании: Сбер
Стек: Python
> Пример ответа
Короткий ответ
В Python есть встроенные типы данных: изменяемые (list, dict, set, bytearray) и неизменяемые (int, float, complex, str, tuple, frozenset, bytes). Также существуют специальные типы: NoneType, bool, range, memoryview. Основное деление - по изменяемости и по назначению: числовые, последовательности, множества, отображения.
Подробное объяснение
Классификация встроенных типов:
- Числовые: int (произвольной точности), float (double precision), complex. Дополнительно есть bool как подкласс int.
- Последовательности: неизменяемые - str, tuple, bytes; изменяемые - list, bytearray. Все поддерживают индексацию, срезы, итерацию.
- Отображения: dict - единственный встроенный тип, хранит пары ключ-значение, ключи должны быть hashable.
- Множества: set (изменяемый), frozenset (неизменяемый). Хранят уникальные hashable элементы.
- Специальные: NoneType (единственный экземпляр None), range (ленивая последовательность), memoryview (представление буфера), object (базовый класс).
Важные свойства:
- Неизменяемые типы безопасны для использования как ключи dict и элементы set.
- Изменяемые типы нельзя использовать как ключи - будет TypeError.
- Все типы являются классами, экземплярами object.
- Проверка типа - через isinstance(), не type() ==.
На практике
Для backend-разработки важно понимать:
- str - иммутабельность строк экономит память при интернировании коротких строк.
- dict - основная структура для JSON, кэшей, конфигов. Сложность операций O(1) в среднем.
- tuple - для фиксированных структур данных, например координат или параметров запроса.
- bytes/bytearray - работа с бинарными данными, сетевыми протоколами, файлами.
- set - быстрые проверки принадлежности, удаление дубликатов.
Практические рекомендации:
- Для больших числовых массивов используйте array или numpy, а не list.
- Для неизменяемых коллекций с хешированием - frozenset, а не set.
- При работе с большими строками помните про конкатенацию через join, а не через +.
Пример кода
PYTHON# Проверка изменяемостиa = [1, 2] # list - mutableb = (1, 2) # tuple - immutable# Использование в dictd = {("key", 1): "value"} # tuple как ключ - ок# d = {[1, 2]: "value"} # TypeError: unhashable type: 'list'# Типы в действииnums = [1, 2, 3] # listunique = set(nums) # setfrozen = frozenset(nums) # frozensetmapping = {"a": 1} # dictraw = b"hello" # bytesmut_raw = bytearray(b"hello") # bytearray# isinstance vs typeisinstance(True, int) # True, потому что bool - подкласс inttype(True) is int # False
Как отвечать на собеседовании
Начните с базовой классификации: изменяемые/неизменяемые, затем перечислите основные группы. Упомяните, что все типы - классы. Покажите понимание hashable-концепции и её связи с dict/set. Приведите примеры из реальной практики: когда использовать tuple вместо list, bytes вместо str. Если спросят про производительность - скажите про O(1) для dict/set и про то, что неизменяемые типы могут быть оптимизированы интерпретатором.
Что проверяет интервьюер
- Понимание фундаментального деления на mutable/immutable.
- Знание ограничений: hashable для ключей dict.
- Умение выбрать правильный тип под задачу.
- Понимание, что bool - подкласс int, а str - не просто массив символов.
- Знание edge cases: frozenset, memoryview, range.
Типичные ошибки
- Путаница между изменяемыми и неизменяемыми типами (например, считают tuple изменяемым, если внутри list).
- Использование type() == вместо isinstance() - ломается для подклассов.
- Попытка использовать list или dict как ключ в dict/set.
- Утверждение, что str - изменяемый тип, потому что можно делать s += "a" (на самом деле создаётся новый объект).
- Забывают про bytes/bytearray при работе с бинарными данными.
- Считают, что float - точный тип, тогда как это double с погрешностью.
> Похожие задачи по backend
Как параллелить выполнение функции в Python
Что должно присутствовать у объекта, чтобы он был итератором в Python
Что происходит с автонастройкой перед сохранением в Django
Есть ли желание работать с Django с использованием Django ORM и архитектуры с бизнес-модулями
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью