← Назад к вопросам

Какие знаешь неизменяемые типы данных?

1.3 Junior🔥 231 комментариев
#Python

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Неизменяемые типы данных в Python

Неизменяемые (immutable) типы данных — это объекты, которые не могут быть изменены после их создания. Это ключевая концепция в Python и других языках программирования, особенно важная для data science и машинного обучения.

Основные встроенные неизменяемые типы

1. int (целые числа)

x = 5
y = x
y = y + 1  # создаётся новый объект, x остаётся 5
print(x, y)  # 5, 6

Любая операция создаёт новый объект в памяти.

2. float (числа с плавающей точкой)

pi = 3.14
pi_new = pi * 2  # новый объект
print(id(pi) == id(pi_new))  # False

3. str (строки)

name = "Alice"
name_upper = name.upper()  # новая строка, исходная не меняется
print(name)  # Alice
print(name_upper)  # ALICE

Операции со строками всегда возвращают новые объекты.

4. tuple (кортежи)

t = (1, 2, 3)
# t[0] = 99  # TypeError: tuple object does not support item assignment

# Но можно создать новый кортеж
t_new = (99,) + t[1:]
print(t_new)  # (99, 2, 3)

5. frozenset (неизменяемые множества)

fs = frozenset([1, 2, 3])
# fs.add(4)  # AttributeError

# Можно использовать как ключ словаря
d = {fs: "values"}
print(d)  # {frozenset({1, 2, 3}): values}

6. bytes (байтовые строки)

b = b"hello"
# b[0] = 65  # TypeError
print(b[0])  # 104 (ASCII код h)

Почему это важно для Data Science?

Безопасность потоков: Неизменяемые объекты безопасны в многопоточных приложениях, так как не требуют синхронизации.

Кэширование: Python кэширует малые целые числа и строки для оптимизации памяти:

a = 256
b = 256
print(a is b)  # True (один и тот же объект)

c = 257
d = 257
print(c is d)  # False (разные объекты)

Использование как ключи словарей: Только неизменяемые типы можно использовать как ключи:

d = {(1, 2): "tuple_key"}  # OK
# d = {[1, 2]: "list_key"}  # TypeError - list мутабелен

Неизменяемость vs. Переменная

Важно понимать разницу:

x = [1, 2, 3]  # переменная x указывает на список
x = [4, 5, 6]  # переменная теперь указывает на другой список

# vs.

t = (1, 2, 3)  # неизменяемый кортеж
# t = t + (4,)  # создаётся новый кортеж, но исходный не изменён

Практическое применение в Data Science

pandas DataFrame индексы: Часто используются кортежи как многоуровневые индексы (MultiIndex).

Параметры моделей: Гиперпараметры часто хранят в кортежах для предотвращения случайного изменения.

Кэширование функций: Неизменяемые аргументы легче кэшировать:

from functools import lru_cache

@lru_cache(maxsize=128)
def expensive_operation(data_tuple):  # tuple кэшируется
    return sum(data_tuple) ** 2

# expensive_operation([1, 2, 3])  # TypeError - list не хэшируем
expensive_operation((1, 2, 3))  # OK

Список vs Кортеж в Data Science

  • Список (mutable): Для исходных данных, которые могут изменяться
  • Кортеж (immutable): Для констант, ключей словарей, возвращаемых значений функций

Основное правило: если данные не должны изменяться, используй неизменяемые типы для предотвращения ошибок и улучшения производительности.

Какие знаешь неизменяемые типы данных? | PrepBro