Зачем нужна сериализация?

Сериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации (структуризации) — восстановление начального состояния структуры данных из битовой последовательности.

Всем привет.Обьясните на простом примере,зачем нужна не то чтобы сериализация,а именно модуль pickle || cPickle в python?Например записывая в файл или передавая в сокет данные мы можем указать в том же файле флаг b,чтобы запись производилась в двоичном режиме.Зачем нужно предварительно сериализовать обьект с помощью модуля pickle?
  • Вопрос задан
  • 11424 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Предположим, есть у вас сложная иерархия классов, в каждом из которых с десяток полей. Некоторые поля ссылаются на объекты других классов или, того хуже, содержат коллекции объектов. При использовании сериализатора, вам достаточно одной строки для сохранения словаря, содержащего объекты из этой иерархии, в файл:
pickle.dump(some_dict, some_fh)
А если будете писать код для ручного сохранения всего этого изобилия в файл, то у вас либо получится объёмный, сложный и глючный код, либо ещё одна версия pickle.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
Assargin
@Assargin
Перед ответом смотрю наличие ✔ в ваших вопросах
Сериализация:
  • это обобщённый процесс для структур языка программирования.
  • нужна для любого взаимодействия в системе, выходящего за рамки передачи данных в текущем скрипте: даже если вам кажется, что она не используется - это не так, она всё равно используется под капотом.

Сериализация гарантирует (для поддерживаемых структур данных), что после процесса сериализации/десериализации вы получите те же самые структуры данных.

Не будь её, вам бы понадобилось вручную создавать свои протоколы и методы перевода данных в вид, пригодный для передачи куда-либо.
Ну и, модуль pickle - это встроенная реализация сериализации, но в то же время - одна из многих. Вы можете использовать, например, json, или yaml. Что угодно, что переведёт обычные структуры данных в пригодную для передачи форму (строку, байтовая строка) и вернёт (десериализует) обратно.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Python
software engineer
Например, вам нужно передать структуру данных на удаленный сервер.
Структура данных выглядит примерно так
struct {
int age=17;
string name="Vasya";
date birthday="01/01/2001"
}

На удаленный сервер мы собираемся передавать обычным HTTP запросом, в который в принципе можно зааттачить XML, а можно передать просто одной строкой прямо в заголовке. Для этого мы можем нашу структуру данных серилизовать в строку, передать туда, там распаковать и получить сразу структуру.
Разница в том, что мы на той стороне будем не "парсить" неизвестные данные, а именно десерилизовать.
Ответ написан
Комментировать
lxsmkv
@lxsmkv
Test automation engineer
Потому что сокет понимает только потоки данных, поскольку основан на протоколе tcp/ip?
Ответ написан
Комментировать
Eridani
@Eridani
Мимо проходил
Как банальный пример: Попробуйте засунуть массив в БД, не раскидывая его ключи по своим полям.
Утрамбовали в сериализацию, записали в БД одной строкой, при надобности - достали, разсериализовали -> пользуемся
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы