python 模块之pickle

地址

pickle 模块可以看作是cPickle 的python实现,cPick效率肯定比pickle快的多。但是cPick是一些函数块,并不是类,所以不能被子类化。大多数情况下不需要cPickle。 两者的模块接口几乎都一样!

python 包含一个更原始的序列化模块marshal ,但是我们经常需要用pickle来序列化对象。marshal 主要用于支持.pyc文件

pickle 和python 主要区别

1.pickle 模块会跟踪已经被序列化的对象,以便稍后对同一对象的引用不再被序列化,marshal 则不是!

    这对于递归对象和对象共享都有影响。递归对象包含对自身的引用的对象,marshal 不会处理这些,所以传递归对象会使python解释器崩溃!我们实际对同一对象多次引用序列化时,pickle 只会存储一次,并且确保所有引用指向主副本,共享保持对象,这对于可变对象来说很实用

2.marshal 不能用于序列化用户定义的类及其实例。pickle可以透明的保存和恢复类的实例。前提是类定义必须是可导入的,并且存储在和该对象相同的模块中。

3.marshal序列化格式是不能保证整个Python版本移植。由于其主要的工作是支持.pyc文件,Python实现者保留在需要时以非向后兼容的方式更改序列化格式的权利。pickle序列化格式是保证不同的Python版本向后兼容。

pickle 保存的格式目前分3种

1.protocol 协议 值为True 时是存储ASCII格式,向后兼容早期python版本

2.protocol 协议值为False 时是存储为二进制格式,兼容早期python版本

3.没研究明白 -_-!

用法

1.写入读取文件

pickle.dump(obj,file,protocol) 

obj 所要存储的对象

file pickle 形势打开的对象文件 open('fileName','w/r')

protocol 就是上面所说的三种格式

pickle.load(file)

2.直接以特定格式返回

pickle.dumps(obj,protocol)


3.那些类可以进行pickle持久化

1.None、True、False

2.整形、长整形、浮点数、复数

3.字符串和unicode 字符串

4.元组、列表、集合、可选对象的字典

5.在模块顶层定义的功能、内置函数、类

6.这些类的实例__dict__或其调用结果__getstate__()是可选的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 前言 在“通过简单示例来理解什么是机器学习”这篇文章里提到了pickle库的使用,本文来做进一步的阐述。 pi...
    leenard阅读 5,995评论 0 2
  • GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-p...
    若与阅读 19,008评论 4 418
  • 环境管理管理Python版本和环境的工具。p–非常简单的交互式python版本管理工具。pyenv–简单的Pyth...
    MrHamster阅读 9,249评论 1 61
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,024评论 19 139
  • 目的地是青城,我觉得那里是海和夜的混合型饮料,夜晚看那儿,很小的时候就有一种身处异乡的感觉。 海鲜大排档前的男男女...
    silence羊羊羊阅读 1,769评论 0 1

友情链接更多精彩内容