pickle是python独有的序列化与反序列化的第三方库,根据官方文档[1],在pickle之外,python同时还有marshal[2]可以支持更复杂的功能。但是在一般情况下,推荐先使用pickle来完成序列化和反序列化的任务
pickle支持六种序列化协议,目前python3.8以后在用的是第5版本。序列化是一种比持久性更原始的概念。 尽管pickle可以读写文件对象,但是它不能处理持久对象的命名问题,也不能解决并发访问持久对象的问题。 pickle模块可以将复杂的对象转换为字节流,并且可以将字节流转换为具有相同内部结构的对象。 也许与这些字节流有关的最好的做法是将它们写入文件,但也可以考虑通过网络发送它们或将它们存储在数据库中[3]。
pickle常用的四个方法:dump, dumps, load, loads,其中前两个是序列化,后两个是反序列化
dump和dumps的分别:dumps不将对象的层次结构也写入文件中
[1]https://docs.python.org/3/library/pickle.html
[2]https://docs.python.org/3/library/marshal.html#module-marshal
[3]https://docs.python.org/3/library/shelve.html#module-shelve