Встречается на 83% собеседований по Python
Какие есть типы данных в Python
В Python все данные представлены объектами, которые делятся на изменяемые (mutable) и неизменяемые (immutable) типы. Изменяемые объекты можно модифицировать после создания, а неизменяемые — нет. Это фундаментальное различие определяет поведение данных в памяти, передачу в функции и использование в качестве ключей словарей.
Основные встроенные типы
Неизменяемые (immutable)
К неизменяемым типам относятся:
- Числа:
int,float,complex(в Python 2 такжеlong). - Строки:
str. - Булевы значения:
bool(подклассint). - Диапазоны:
range(в Python 3). - Кортежи:
tuple— неизменяемы, но могут содержать изменяемые элементы. - Неизменяемые множества:
frozenset. - Байты:
bytes(неизменяемая последовательность байтов). - NoneType: тип объекта
None.
Изменяемые (mutable)
К изменяемым типам относятся:
- Списки:
list. - Словари:
dict. - Множества:
set. - Байтовые массивы:
bytearray.
Кортежи: особый случай
Кортеж (tuple) сам по себе неизменяем, но его изменяемость зависит от содержимого. Если кортеж содержит только неизменяемые объекты, он полностью неизменяем. Если же внутри есть изменяемые объекты (например, список), то содержимое кортежа можно изменить, хотя сам кортеж нельзя расширить или удалить из него элементы.
python
# Кортеж с неизменяемыми элементами
t1 = (1, 2, 3)
# t1[0] = 10 # Ошибка: кортеж не поддерживает присваивание
# Кортеж, содержащий список
t2 = ([1, 2], 3)
t2[0].append(4) # ОК: список внутри кортежа изменяем
print(t2) # ([1, 2, 4], 3)Подводные камни и практические следствия
- Ключи словарей должны быть неизменяемыми, поэтому можно использовать
tupleс неизменяемыми элементами, но неlistилиset. - Передача в функции: изменяемые объекты передаются по ссылке, и их изменение внутри функции влияет на оригинал. Неизменяемые — по значению (фактически создаётся копия при изменении).
- Хешируемость: неизменяемые типы обычно хешируемы, что позволяет использовать их в
setи как ключиdict. Исключение —tuple, содержащий изменяемые элементы, он не хешируем. - Производительность: неизменяемые типы часто оптимизированы, например, строки хранятся эффективно, но их изменение требует создания нового объекта.
Коротко
- В Python типы делятся на изменяемые (
list,dict,set,bytearray) и неизменяемые (int,str,tuple,frozenset,bytes,NoneType). - Кортеж неизменяем, но его изменяемость зависит от содержимого: если внутри есть изменяемые объекты, их можно менять.
- Неизменяемые типы можно использовать как ключи словаря и элементы множества, изменяемые — нет.
- При передаче изменяемых объектов в функцию изменения отражаются на оригинале, а неизменяемых — нет.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы
