Что такое pickling
Pickling (сериализация) — это превращение объекта или целой иерархии объектов в линейное бинарное представление.
Ключевые моменты:
Работает с большинством базовых и пользовательских типов (list, dict, пользовательские классы, вложенные структуры).
Результат — байтовый поток, который можно записать в файл, отправить по сети или сохранить в БД как бинарное поле.
Пример: сохранить объект в файл:
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‑стека).
Передача сложных объектов между процессами (например, в задачах очередей и worker‑систем).
Ограничения и риски, про которые любят спрашивать
Формат pickle специфичен для Python и может отличаться между версиями, это не кросс‑языковой формат (в отличие от JSON или Protocol Buffers).
Unpickling небезопасен для непроверенных данных: вызов pickle.load() на произвольном входе может привести к выполнению произвольного кода. Поэтому его используют только с доверенными источниками.
Фраза для собеседования
Pickling — это сериализация объектов в байтовый поток с помощью модуля pickle, unpickling — обратное восстановление объектов. Удобно для кешей, передачи данных и хранения моделей, но использовать pickle с непроверенным вводом нельзя из‑за рисков безопасности.