Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Неизменяемые типы данных в 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): Для констант, ключей словарей, возвращаемых значений функций
Основное правило: если данные не должны изменяться, используй неизменяемые типы для предотвращения ошибок и улучшения производительности.