Ответ
Неизменяемые (immutable) типы в Python — это типы, объекты которых нельзя изменить после создания. Любая операция, которая кажется изменяющей объект, на самом деле создает новый объект.
Основные встроенные immutable-типы:
int— целые числа.float— числа с плавающей точкой.bool— логические значения (True,False).str— строки.tuple— кортежи.frozenset— неизменяемое множество.bytes— неизменяемая последовательность байтов.range— диапазон.NoneType(тип объектаNone).
Почему это важно?
- Безопасность: Immutable-объекты потокобезопасны.
- Хешируемость: Их можно использовать как ключи словаря (
dict) или элементы множества (set). - Предсказуемость: Передача в функцию не приводит к неожиданным изменениям исходного объекта.
Примеры и демонстрация:
# 1. Строки (str) — immutable
my_string = "hello"
print(id(my_string)) # id: 140245... (адрес в памяти)
my_string += " world" # Конкатенация создает НОВЫЙ объект
print(id(my_string)) # id: 140245... (уже другой адрес!)
# my_string[0] = 'H' # TypeError: 'str' object does not support item assignment
# 2. Кортежи (tuple) — immutable
my_tuple = (1, 2, [3, 4])
# my_tuple[0] = 10 # TypeError: 'tuple' object does not support item assignment
# Однако, если элемент сам является изменяемым (как список [3,4]), его содержимое можно менять!
my_tuple[2].append(5) # Это сработает: кортеж хранит ссылку на список, а не сам список.
print(my_tuple) # (1, 2, [3, 4, 5])
# 3. Использование как ключ словаря (требуется хешируемость)
valid_dict = {(1, 2): "value"} # Кортеж — immutable, можно как ключ.
# invalid_dict = {[1, 2]: "value"} # TypeError: unhashable type: 'list' (list — mutable)