python小知识-python序列化

简介: 序列化就是把内存中的数据结构在不丢失其身份和类型信息的情况下转成对象的文本或二进制表示的过程。而反序列化就是将对象的文本或者二进制还原成原始对象的过程

1. 什么是序列化

有时候,我们希望存储或者传输不只是数据,而是一些内存中的对象和数据结构,以便在远程或者其他进程中可以直接使用相同的对象。

常见的场景有,在数据分析过程中,通常模型训练是离线的,而预测时线上的,而同时也需要不断的更新模型到线上来预测;所以当我们训练好一个机器学习的模型时需要保存这个模型的内存中对象(包括上下文的状态信息),以便可以用来做预测;在分布式计算时,如spark内存分布式计算框架,在集群之间需要进行大量的对象传输;

这里的将内存中对象存储的过程就是序列化,而在其他进程中使用这个对象的过程是反序列化。

更简单的说,序列化就是把内存中的数据结构在不丢失其身份和类型信息的情况下转成对象的文本或二进制表示的过程。而反序列化就是将对象的文本或者二进制还原成原始对象的过程。

2. python的序列化

python中提供需要方法支持序列化,比较常用的pickle和json

其中序列化的过程是dump,反序列化的过程是load

我们来看看

import pickle
dict_obj = {"name": "jack", "age": 40}
with open('picklefile.data', 'wb') as f:
    pickle.dump(dict_obj, f)
    
print(dict_obj, type(dict_obj))

# {'name': 'jack', 'age': 40} <class 'dict'>

with open('picklefile.data', 'rb') as f:
    new_dict_obj = pickle.load(f)

# {'name': 'jack', 'age': 40} <class 'dict'>

pickle几乎支持python所有的对象,包括布尔、数字、字符串、字节数组、None、列表、元组、字典和集合等基本数据类型,picike还能够处理循环,递归引用对象、类、函数以及类的实例等

pickle有一个C的实现即Cpickle,区别就是速度,Cpickle的速度是pickle的1000倍import cPickle as pickle

3.python序列化的缺点

  • 首先pickle是python的包,pickle序列化对象只能在python环境中使用,不能跨语言
  • pickle可能存在安全性问题

跨语言的问题,Java序列化同样的问题。通用的有google的Protocol Buffers和facebook的Thrift,有兴趣可以了解下,包括gRPC。

目录
相关文章
|
存储 算法 Python
Python算法——树的序列化与反序列化
Python算法——树的序列化与反序列化
204 1
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
4月前
|
存储 JSON JavaScript
python序列化: json & pickle & shelve 模块
python序列化: json & pickle & shelve 模块
|
4月前
|
存储 算法 Python
【Leetcode刷题Python】297. 二叉树的序列化与反序列化
LeetCode第297题"二叉树的序列化与反序列化"的Python语言解决方案,包括序列化二叉树为字符串和反序列化字符串为二叉树的算法实现。
29 5
|
4月前
|
JSON 缓存 安全
Python pickle 二进制序列化和反序列化 - 数据持久化
Python pickle 二进制序列化和反序列化 - 数据持久化
63 0
|
7月前
|
存储 JSON PHP
python序列化与反序列化
python序列化与反序列化
101 6
|
7月前
|
存储 JSON 数据挖掘
python序列化和结构化数据详解
python序列化和结构化数据详解
103 0
|
7月前
|
存储 JSON 安全
Python中对象到文件的序列化和反序列化
【4月更文挑战第2天】在Python编程中,序列化和反序列化是处理对象与文件之间转换的重要技术。序列化是将对象状态转换为可以存储或传输的形式的过程,通常是将对象转换为字节流。反序列化则是将序列化后的形式转换回对象的过程。在Python中,我们可以使用`pickle`模块来轻松地实现对象的序列化和反序列化。
|
7月前
|
存储 JSON JavaScript
Python中的JSON与Pickle模块:数据序列化和反序列化的利器
在Python编程中,数据的序列化和反序列化是经常遇到的操作。序列化是将数据结构或对象状态转换为可以存储或传输的格式的过程,而反序列化则是这个过程的逆操作,即将序列化的数据重新转换回原来的数据结构或对象状态。Python中的JSON和Pickle模块就是实现数据序列化和反序列化的强大工具。
|
7月前
|
Go Python 算法
Python每日一练(20230412) 队列实现栈、二叉树序列化、交换链表节点
Python每日一练(20230412) 队列实现栈、二叉树序列化、交换链表节点
771 0
Python每日一练(20230412) 队列实现栈、二叉树序列化、交换链表节点