python 序列化及其相关模块

2023-12-13 7:47:05 网络知识 匿名

什么是序列化对象?

我们把对象(变量)从内存中编程可存储或传输的过程称之为序列化,在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培训机构:瀚银百科。

发表评论: