Сериализация и десериализация python

задняя часть Python .NET JSON

1. Что такое сериализация?

При работе программы все переменные или объекты сохраняются в памяти, после завершения вызова программы память, занимаемая этими переменными или объектами, освобождается. Чтобы добиться постоянного хранения переменных и объектов на диске или передачи по сети, нам нужно преобразовать переменные или объекты в бинарные потоки. А процесс преобразования его в бинарный поток и есть сериализация.

2. Что такое десериализация

Десериализация означает, что при работе программа не может быть прочитана с диска, ей необходимо передать сериализованный объект или переменную с диска в память, а также преобразовать бинарный поток в исходный формат данных. Мы называем этот процесс десериализацией.

3. Как Python реализует сериализацию и десериализацию

Вот в основном два модуля модуля pickle и модуль json.

3.1 модуль рассола

дамп (объект) и дампы (объекты) сериализуются load(byte) и load(byte) — это десериализация

import pickle

dict1 = {'a': 1, 'b': 2}
dict2 = pickle.dumps(dict1)
print(dict2,type(dict2),id(dict2))
dict3 = pickle.loads(dict2)
print(dict3,type(dict3),id(dict3))

D:\python\Python36\python.exe E:/demo/-python-/handlers/test.py b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02u.' <class 'bytes'> 1536157390816 {'a': 1, 'b': 2} <class 'dict'> 1536043176080

Из вывода видно, что адреса двух в памяти не совпадают.Причина в том, что после того, как мы сериализуем словарь, конец вызова словаря действительно освобождается в памяти, а после десериализации он извлекается из диске и хранится в памяти.Блок памяти был переразбит, поэтому адреса отображаются по-разному.

дамп и загрузка сериализуются и десериализуются в файлы

import pickle
import os

dict1 = {'a': 1, 'b': 2}
file = open(os.path.join(os.path.abspath('.'), '1.txt'), 'wb')
dict2 = pickle.dump(dict1, file)
file.close()
print(dict2, type(dict2), id(dict2))
file1 = open(os.path.join(os.path.abspath('.'), '1.txt'), 'rb')
dict3 = pickle.load(file1)
file1.close()
print(dict3, type(dict3), id(dict3))

None <class 'NoneType'> 1805423824 {'a': 1, 'b': 2} <class 'dict'> 2622050204264

3.2 json-модуль

json.dumps: преобразовать формат python в строковую форму json. json.loads: преобразовать строковый формат json в формат данных python.

import json

dict1 = {'a': 1, 'b': 2}
dict2 = json.dumps(dict1)
print(dict2, type(dict2), id(dict2))
dict3 = json.loads(dict2)
print(dict3, type(dict3), id(dict3))

{"a": 1, "b": 2} <class 'str'> 2040970141536 {'a': 1, 'b': 2} <class 'dict'> 2040937894392

json.dump: сериализовать в файл json.load: десериализовать содержимое файла

import os

dict1 = {'a': 1, 'b': 2}
file1 = open(os.path.join(os.path.abspath('.'), '1.txt'), 'w')
dict2 = json.dump(dict1, file1)
file1.close()
print(dict2, type(dict2), id(dict2))
file2 = open(os.path.join(os.path.abspath('.'), '1.txt'), 'r')
dict3 = json.load(file2)
print(dict3, type(dict3), id(dict3))

None <class 'NoneType'> 1805423824 {'a': 1, 'b': 2} <class 'dict'> 1907991182648

Ссылаться на:blog.CSDN.net/Hot U-Phoenix/art… blog.CSDN.net/U012993796/…