Ответ
Сериализация — это процесс преобразования объектов Python (например, словарей, списков, экземпляров классов) в формат, который можно легко сохранить (например, в файл) или передать по сети (например, через API). Обратный процесс, восстановление объекта из этого формата, называется десериализацией.
Почему сериализация важна?
- Персистентность: Позволяет сохранять состояние объектов для последующего использования (например, кэширование данных, сохранение настроек приложения).
- Передача данных: Обеспечивает обмен данными между различными приложениями, сервисами или даже языками программирования (например, JSON для веб-API).
- Межпроцессное взаимодействие: Упрощает передачу объектов между разными процессами в одной системе.
Распространенные форматы и модули в Python:
- JSON (JavaScript Object Notation): Человекочитаемый, текстовый формат, широко используемый для веб-API и обмена данными между различными языками. В Python используется модуль
json
. - Pickle: Бинарный формат, специфичный для Python. Позволяет сериализовать практически любые объекты Python. Используется модуль
pickle
. Внимание: Десериализация данных из недоверенных источников с помощьюpickle
небезопасна, так как может привести к выполнению произвольного кода. - YAML (YAML Ain't Markup Language): Человекочитаемый формат, часто используемый для конфигурационных файлов. В Python есть сторонняя библиотека
PyYAML
. - XML (Extensible Markup Language): Структурированный текстовый формат, исторически популярный для обмена данными. В Python есть встроенный модуль
xml.etree.ElementTree
.
Пример сериализации и десериализации с использованием json
:
import json
# Объект Python (словарь)
data = {
"name": "Alice",
"age": 30,
"is_student": False,
"courses": ["Math", "Physics"]
}
print("Исходный объект Python:", data)
# --- Сериализация: объект Python -> JSON-строка ---
# json.dumps() преобразует объект Python в JSON-строку.
# indent=4 делает вывод более читаемым.
json_string = json.dumps(data, indent=4)
print("nСериализованная JSON-строка:")
print(json_string)
# --- Десериализация: JSON-строка -> объект Python ---
# json.loads() преобразует JSON-строку обратно в объект Python.
loaded_data = json.loads(json_string)
print("nДесериализованный объект Python:", loaded_data)
# Доступ к данным после десериализации
print(f"Возраст из десериализованных данных: {loaded_data['age']}") # 30
print(f"Первый курс: {loaded_data['courses'][0]}") # Math