引言
在程序运行过程中,所有的变量都是存在内存中的,比如我们随意定义的dict,他是存活在内存中的
d=dict(name='xiaoming',age=20,score=10)
但是,一旦程序结束,变量所占用的内存都会被系统所回收,如果我们在程序中给dict中的name重新设置了新值,那么当程序退出,再次打开时,name又开始执行代码,变成了原来的值。
这个时候,我们可能就需要将某些内存中的数据,固化到本地磁盘上了。
这种把变量从内存中变成可存储或者传输的过程称之为序列化,在python中称为「pickling」。
还记得在java中序列化叫做「serialization」,其实是一个意思。
经过序列化后,就可以把序列化之后的内容写入到磁盘,或者通过网络传输到别的机器上去。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即「unpickling」
python 提供了pickle模块来实现序列化
pickle模块
我们先尝试把一个对象序列化存入文件
![](https://img.haomeiwen.com/i2742735/dae6792b34f1c145.png)
本例中,我们发现使用到了pickle中的两个方法
- dumps(变量/对象)
这个方法能够将变量或者对象转化成bytes,然后我们就可以把这个bytes写入到文件中去
*dump(变量/对象,文件)
这个方法更加简便,直接将对象序列化后写入到文件中去
根据需要使用即可
现在我们反过来,将对象从磁盘读取到内存,看看怎么操作
我们来看下示例
![](https://img.haomeiwen.com/i2742735/8328887ac265dbf2.png)
第二个为picks()写法
![](https://img.haomeiwen.com/i2742735/3020fabffffbe8a6.png)
这样一对比,发现还是pick()更加合适这个需求
ok,python的序列化(「pickling」)和反序列化(「unpickling」)
就到这里啦~,是不是很简单,大家加油练起来吧
网友评论