python 序列化及其相关模块

来源:千锋教育
发布时间:2023-11-07 10:47:20
分享

什么是序列化对象?

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

声明:本站部分稿件版权来源于网络,如有侵犯版权,请及时联系我们。

相关推荐

  • Python k-近邻算法的优缺点 优点pythonk-近邻算法简单,易于理解,易于实现,无需参数估计,无需训练,即可以用来做分类也可以用来做回归和朴素贝叶斯算法比,对数据没有假设,准确度高,对异常值不敏感(个别噪音数据对结果的影响不是
  • Python k-近邻算法的实现原理 1.KNN算法流程步骤(1)收集数据:可以使用任何方法。包括爬虫,或者第三方提供的免费或收费数据(2)准备数据:距离计算所需要的数值,最好是结构化的数据格式(计算测试数据与各个训练数据之间的距离)(3
  • Python k-近邻算法常见问题 1,K值设定为多大?K太小,分类结果易受噪声点影响;K太大,近邻中又可能包含太多的其他类别的点。(对距离加权,可以降低K值设定的影响)K值通常是采用交叉检验来确定经验规则:K一般低于训练样本数的平方根
  • 基于 Python K-近邻算法的手写识别系统 这里我们一步步的构造使用k-近邻分类器的手写识别系统,为了简单起见,这里构造的系统只能识别数字0到9,参考图2-6,需要识别的数字已经使用图形处理软件,处理成具有相同的色彩和大小:宽高是32像素*32
  • python socket网络编程之粘包问题详解 粘包问题详情1、只有TCP有粘包现象,UDP永远不会粘包你的程序实际上无权直接操作网卡的,你操作网卡都是通过操作系统给用户程序暴露出来的接口,那每次你的程序要给远程发数据时,其实是先把数据从用户态co
  • Python中关于OPP的常用术语 1抽象/实现抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于绘程序结构,从而实现这种模型。抽象不仅包括这种模型的数据属性,还定义了这些数据的接口。对某种抽象的实现就是