import pickle
data = ... # Some Python object f = open('somefile', 'wb') pickle.dump(data, f)
f = open('somefile', 'rb') data = pickle.load(f)
data = pickle.loads(s)
有些类型的对象是不能被序列化的。这些通常是那些依赖外部系统状态的对象, 比如打开的文件,网络连接,线程,进程,栈帧等等。 用户自定义类可以通过提供 getstate() 和 setstate() 方法来绕过这些限制。 如果定义了这两个方法,pickle.dump() 就会调用 getstate() 获取序列化的对象。 类似的,setstate() 在反序列化时被调用。为了演示这个工作原理, 下面是一个在内部定义了一个线程但仍然可以序列化和反序列化的类: