pickle——python对象的串行化

最近感觉自己虽然玩了3年多的python,但仅仅停留在使用的阶段上,对python的很多内容还不算很了解,打算沉下心来,扎扎实实的学些东西了。
对象的串行化感觉上是很有用的(但自己很少用到),不过还是好好学习下吧。

1)相关的python模块
  在python 3.0里,和python相关的模块主要有2个:_pickle,marshal.
  其中_pickle是对pickle的优化,是使用C语言对底层进行了一部分的优化。
  marshal是python里原生的串行化类,但是在使用上pickle更加优秀,marshal的存在主要是为了支持python的*.pyc文件。
  pickle模块和marshal模块有几方面的差别:
  1>pickle模块对已串行化的对象进行跟踪,因此对同一个对象的引用不需要再次串行化。marshal不这么做。
  对于循环对象而言,他们包括对自己的引用,因此marshal不支持循环对象。
  共享对象由于是指有多个实例指向同一个引用,pickle保存一个引用,并使得其他实例都指向该对象,来保证所有实例的一致性。
  2>marshal不能用来串行化用户自定义对象和它们的实例。pickle可以串行化这些对象,但前提是类的定义是可以引入的,并且和对象串行化的类在一个模块里。
  3>marshal不能跨版本,因为它主要是用来支持*.pyc文件的,解释器不需要保持对以前版本的兼容性。而pickle可以做到这一点。

2)用法
  pickle. dump ( obj, file [, protocol ] )
  pickle. dumps ( obj [, protocol ] )
 
pickle. load ( file [, *, encoding="ASCII", errors="strict" ] )
 
pickle. loads ( bytes_object [, *, encoding="ASCII", errors="strict" ] )

3)异常
 
exception pickle. PickleError     基本的Error,从Exception继承而来
  exception pickle. PicklingError   当一个不支持Pickle的对象被pickle被激发
  exception pickle. UnpicklingError Unpickle出错时被激发,例如数据损坏或安全问题

4)
可以被pickle的对象
  None,True,False
  数字,复数
  字符串,字符集
  元组,列表,集合,字典
  模块的顶层函数、内置函数、类
 
--------------------------------------
太晚了,今天先写到这里,明天补充一些例子,并对用法进行详细说明。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值