内容简介:当程序运行时,所有的变量或者对象都是存储到内存中的,一旦程序调用完成,这些变量或者对象所占有的内存都会被回收。而为了实现变量和对象持久化的存储到磁盘中或在网络上进行传输,我们需要将变量或者对象转化为二进制流的方式。 而将其转化为二进制流的过程就是序列化。而反序列化就是说程序运行的时候不能从磁盘中进行读取,需要将序列化的对象或者变量从磁盘中转移到内存中,同时也会将二进制流转换为原来的数据格式。我们把这一过程叫做反序列化。这里主要讲两个模块pickle模块和json模块
当程序运行时,所有的变量或者对象都是存储到内存中的,一旦程序调用完成,这些变量或者对象所占有的内存都会被回收。而为了实现变量和对象持久化的存储到磁盘中或在网络上进行传输,我们需要将变量或者对象转化为二进制流的方式。 而将其转化为二进制流的过程就是序列化。
2. 什么是反序列化
而反序列化就是说程序运行的时候不能从磁盘中进行读取,需要将序列化的对象或者变量从磁盘中转移到内存中,同时也会将二进制流转换为原来的数据格式。我们把这一过程叫做反序列化。
3. python如何实现序列化和反序列化
这里主要讲两个模块pickle模块和json模块
3.1 pickle模块
dump(object)和dumps(objects)是序列化 load(byte)和loads(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
输出结果可以看出两者在内存中的地址并不相同,原因是我们在将字典序列化后,字典调用结束确实在内存中释放了,而反序列化后又从磁盘中取出并在内存中重新划分了一块内存,因此地址显示不同。
dump和load是序列化和反序列化到文件中去
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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ASP.NET 4高级程序设计(第4版)
Matthew MacDonald / 博思工作室 / 人民邮电出版社 / 2011-6 / 148.00元
《ASP.NET 4高级程序设计(第4版)》,本书是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的建议。一起来看看 《ASP.NET 4高级程序设计(第4版)》 这本书的介绍吧!