pickle模块:
它可以序列化对象并保存到磁盘中,并在需要的时候读取出来,任何对象都可以执行序列化操作。
那么什么又是序列化呢?
简单来说,序列化就是用来处理对象流的机制。所谓对象流也就是将对象的内容进行流化,流的概念这里不用多说(就是I/O),我们可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间(注:要想将对象传输于网络必须进行流化)!
然而,在对流对象进行读写操作的时候,会遇到一些问题,序列化就是用来解决这些问题的。
下面说明一下,会遇到哪些问题:
如果一个类A含有另一个类B的引用,现在对A、B进行实例化,这时内存中就会分配两个空间,一个存储对象A,一个存储对象B。此时,如果想要将其写入磁盘中的文件,就会由于B中含有A的引用,在写入的过程中,系统会自动复制一份A到B中;同时A自己本身,也会写入一次。这时,恢复文件就会导致出现两个A和一个B。不仅浪费了资源,也会使在对A进行更改时,需要查找到所有的A,都进行过更改,较为繁琐。
而序列化机制的解决方案则是:
1.保存到磁盘的所有对象都获得一个序列号(1, 2, 3等等)
2.当要保存一个对象时,先检查该对象是否被保存了。
3.如果以前保存过,只需写入"与已经保存的具有序列号x的对象相同"的标记,否则,保存该对象