> Какие типы данных существуют в 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 - mutable
b = (1, 2) # tuple - immutable
# Использование в dict
d = {("key", 1): "value"} # tuple как ключ - ок
# d = {[1, 2]: "value"} # TypeError: unhashable type: 'list'
# Типы в действии
nums = [1, 2, 3] # list
unique = set(nums) # set
frozen = frozenset(nums) # frozenset
mapping = {"a": 1} # dict
raw = b"hello" # bytes
mut_raw = bytearray(b"hello") # bytearray
# isinstance vs type
isinstance(True, int) # True, потому что bool - подкласс int
type(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 с погрешностью.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью