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/…