python序列化 -- pickle和json

本文深入探讨了序列化技术,特别是Python中的pickle模块,用于对象的存储和传输。文章对比了二进制序列化与JSON文本序列化的特点,详细介绍了pickle.dump和pickle.load的使用方法,以及序列化在内存优化和跨平台数据交换中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提下序列化的知识点,目的有两个:

1. 存储或者传输抽象的代码对象(这个对象可以是一个类,一个字典等等,这些事物无法脱离py文件单独存在,所以我们统一制定一个统一编码标准将其转为二进制字节,到用的时候再解码)

2. 持久化存储,我们知道有些文件存储是以某种编码形式存在的;换句话说,换台机器用不同的编码格式,该文件的二进制字节格式完全不同。所以我们需要有一个统一的编码和解码方法将文件或者对象存储起来,以便于交流。

从上面两点我们可以推测出,既然序列化是着重于存储的,所以估计是做了内存优化的。比如一个对象在系统中占用了10m空间,将其序列化后,占用的空间应该不到10m,当然这是推测~

json序列化

与二进制序列化不同,json是文本序列化,其可以在不同编程语言之间做交互,且序列化后可以直接阅读。这里不多做介绍。

pickle.dump和pickle.load

pickle.dump用于序列化,即将对象转为统一格式的二进制码:

# -*- coding: utf-8 -*- 
import pickle

if __name__ == '__main__':
    dic = {'a':'b', 'c':'d', 'e':'f'}
    # 将dic对象序列化至f文件中
    with open('pickle_example.pickle', 'wb') as f:
        pickle.dump(dic, f)
        f.close()

pickle.load用于发序列化,将二进制码解码为对象:

# -*- coding: utf-8 -*- 
import pickle

if __name__ == '__main__':
    # 将f文件序列化
    with open('pickle_example.pickle', 'rb') as f:
        dic = pickle.load(f)
        print (type(dic))
        print (dic)

输出为:

 

参考资料:

[1] pickle二进制序列化和json文本序列化的比较

[2] (莫烦) pickle保存数据

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值