import pickle # python pickle module import _pickle # c pickle module class A: __slots__ = 'my_attribute' def __init__(self, value): self.my_attribute = value # a class with slots must define a __getstate__ method def __getstate__(self): return None, {'my_attribute': self.my_attribute} class B: __slots__ = 'my_attribute' def __init__(self, value): self.my_attribute = value # a class with slots must define a __getstate__ method def __getstate__(self): return {}, {'my_attribute': self.my_attribute} if __name__ == "__main__": for cls in [A, B]: print('trying to depickle {}'.format(cls)) obj = cls(10) # pickle_depickle using the pythonic pickle depickled_obj = pickle._loads(pickle._dumps(obj)) assert isinstance(depickled_obj, cls) assert depickled_obj.my_attribute == 10 # pickle_depickle using the c pickle c_depickled_obj = _pickle.loads(_pickle.dumps(obj)) assert isinstance(c_depickled_obj, cls) assert depickled_obj.my_attribute == 10