什么是序列化对象?
我们把对象(变量)从内存中编程可存储或传输的过程称之为序列化,在python中称为pickle,其他语言称之为serialization,marshalling,flatterning等等,都是一个意思。
序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上(因为硬盘或网络传输时只接受bytes)。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpacking。
为什么要序列化?
举个例子,你在打游戏过程中,打累了,停下来,想过两天再玩,两天之后,游戏又从你上次停止的地方继续运行,你上次游戏的进度肯定保存到硬盘上了,那么是以何种形式呢?游戏过程中产生的很多临时数据是不规律的,可能在你关掉游戏时正好是10个列表,3个嵌套字典的数据集合在内存里面,需要存下来,你如何存?把列表变成文件里的多行多列形式?那嵌套字典呢?根本没法存吧,所以,若是有种办法可以直接把内存数据存到硬盘上,下次程序再启动,再从硬盘上读出来,还是原来的格式,那是最好的,所以这就是我们要说的序列化。
1、持久保存状态
一个软件/程序的执行就在处理一系列状态的变化,在编程语言中,‘状态’会以各种各样有结构的数据类型(也可以简单的理解为变量)的形式被保存在内存中
内存是无法永久保存数据的,当程序运行了一段时间,我们断电或者重启程序,内存中关于这个程序的之前一段时间的数据(有结构)都被清空了。
在断电或重启程序之前将程序当前内存中所有的数据都保存下来(保存到文件中),以便于下次程序执行能够从文件中载入之前的数据,然后继续执行,这就是序列化。
2、跨平台数据交互
序列化之后,不仅可以把序列化后的内容写入磁盘,还可以通过网络传输到别的机器上,如果收发的双方约定好使用一种序列化的格式,那么变打破了平台/语言差异化带来的限制,实现了跨平台的数据交互。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling.
什么可以序列化操作?
在python中,可以使用pickle和json两个模块对数据进行序列化操作
其中:
json可以用于字符串或者字典等与python数据类型之间的序列化与反序列化操作
pickle可以用于python特有类型与python数据类型之间的序列化与反序列化操作
提问:这时候有人肯定要问,两个都可以对数据进行序列化,为什么不只学习一个就好了,非要学习两个呢?
这个问题问的好,我们下面详细讲一下两个的区别。
关于json
优点:跨语言,体积小
缺点:只能支持int(整形),str(字符串),list(列表),tuple(元祖),dict(字典)
关于pickle
优点:专门为python设计,只支持python所有的数据类型
缺点:只能在python中使用,存储数据占空间大
以上内容为大家介绍了python序列化及其相关模块,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。