> Какие типы данных существуют в 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 - подкласс int
  • NoneType - единственный объект 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 assignment
t = (1, 2, 3)
# t[0] = 10 # TypeError
# Изменяемые типы
lst = [1, 2, 3]
lst[0] = 10 # OK
d = {"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() vs isinstance()

> Похожие задачи по Python

> Похожие задачи по backend

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

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