Pickling (сериализация) — это превращение объекта или целой иерархии объектов в линейное бинарное представление.
Ключевые моменты:
Работает с большинством базовых и пользовательских типов (списки, словари, классы, вложенные структуры).
Результат — байтовый поток, который можно
- записать в файл;
- отправить по сети;
- сохранить в БД как бинарное поле.
Пример: сохранить объект в файл:
import pickle
data = {"id": 1, "name": "TeoBrain"}
with open("data.pkl", "wb") as f:
pickle.dump(data, f) # picklingЧто такое unpickling
Unpickling (десериализация) — обратный процесс: взять байтовый поток и восстановить из него исходный объект или их иерархию.
Пример: прочитать объект из файла:
import pickle
with open("data.pkl", "rb") as f:
data = pickle.load(f) # unpickling
# data снова обычный dictВажно понимать, что при unpickling‑е модуль pickle создаёт новые объекты с тем же содержимым, которое было у сохранённых.
Зачем это нужно в реальных проектах
Типичные сценарии использования pickling / unpickling в backend‑коде:
Сохранение промежуточных результатов или состояния программы (кеш, сессии).
Хранение обученных моделей и больших структур данных (особенно в ML‑части Python‑стека).
Быстрая передача сложных объектов между процессами (например, в задачах очередей).
Но на собеседованиях также ожидают, что вы помните про ограничения и риски:
Формат pickle специфичен для Python и может меняться между версиями, поэтому это не универсальный кросс‑языковой формат (в отличие от JSON).
Unpickling небезопасен для непроверенных данных: выполнение pickle.load() на произвольном входе может привести к выполнению произвольного кода, поэтому его используют только с доверенными источниками.