python 序列化及其相关模块

发布时间:2022-04-24 09:57:35 人气:39 作者:多测师

  什么是序列化对象?

  我们把对象(变量)从内存中编程可存储或传输的过程称之为序列化,在python中称为pickle,其他语言称之为serialization ,marshalling ,flatterning 等等,都是一个意思。

  序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上(因为硬盘或网络传输时只接受bytes)。

  反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpacking。

  为什么要序列化?

  举个例子,你在打游戏过程中,打累了,停下来,想过两天再玩,两天之后,游戏又从你上次停止的地方继续运行,你上次游戏的进度肯定保存到硬盘上了,那么是以何种形式呢?游戏过程中产生的很多临时数据是不规律的,可能在你关掉游戏时正好是10个列表,3个嵌套字典的数据集合在内存里面,需要存下来,你如何存?把列表变成文件里的多行多列形式?那嵌套字典呢?根本没法存吧,所以,若是有种办法可以直接把内存数据存到硬盘上,下次程序再启动,再从硬盘上读出来,还是原来的格式,那是最好的,所以这就是我们要说的序列化。

  1、持久保存状态

  一个软件/程序的执行就在处理一系列状态的变化,在编程语言中,‘状态’会以各种各样有结构的数据类型(也可以简单的理解为变量)的形式被保存在内存中

  内存是无法永久保存数据的,当程序运行了一段时间,我们断电或者重启程序,内存中关于这个程序的之前一段时间的数据(有结构)都被清空了。

  在断电或重启程序之前将程序当前内存中所有的数据都保存下来(保存到文件中),以便于下次程序执行能够从文件中载入之前的数据,然后继续执行,这就是序列化。

python 序列化及其相关模块

  2、跨平台数据交互

  序列化之后,不仅可以把序列化后的内容写入磁盘,还可以通过网络传输到别的机器上,如果收发的双方约定好使用一种序列化的格式,那么变打破了平台/语言差异化带来的限制,实现了跨平台的数据交互。

  反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling.

  什么可以序列化操作?

  在python中,可以使用pickle和json两个模块对数据进行序列化操作

  其中:

  json可以用于字符串或者字典等与python数据类型之间的序列化与反序列化操作

  pickle可以用于python特有类型与python数据类型之间的序列化与反序列化操作

  提问:这时候有人肯定要问,两个都可以对数据进行序列化,为什么不只学习一个就好了,非要学习两个呢?

  这个问题问的好,我们下面详细讲一下两个的区别。

  关于json

  优点:跨语言,体积小

  缺点:只能支持int(整形),str(字符串),list(列表),tuple(元祖),dict(字典)

  关于pickle

  优点:专门为python设计,只支持python所有的数据类型

  缺点:只能在python中使用,存储数据占空间大

  以上内容为大家介绍了python 序列化及其相关模块,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注多测师。https://www.e70w.com/xwzx/


返回列表
在线客服
联系方式

热线电话

17727591462

上班时间

周一到周五

二维码
线