スクリプトの再コンパイルによってクラス定義が更新された後、pickle はそのクラスの以前にインスタンス化されたオブジェクトのシリアル化を拒否し、次のエラーを表示します: "Can't pickle object: it's not the same object as "
そのような場合を無視する必要があることをピクルに伝える方法はありますか? クラスを名前で識別するだけで、不一致の原因となっている内部の一意の ID を無視しますか?
この問題を便利で堅牢な方法で解決する代替の同等のモジュールの提案を答えとして歓迎します。
参考までに、私の志望動機は次のとおりです。
私は、Python スクリプトをライブで編集できる、生産性の高い迅速なイテレーション開発環境を作成しています。スクリプトは繰り返し再コンパイルされますが、データはコンパイル間で保持されます。生産性の目標の一環として、私はシリアル化に pickle を使用しようとしています。これにより、データ構造が常に変化するための明示的なシリアル化コードを作成および更新するコストを回避できます。
ほとんどの場合、組み込み型をシリアル化します。私はピクルするクラスで意味のある変更を避けるように注意しており、必要に応じて copy_reg.pickle メカニズムを使用して unpickle でアップコンバージョンを実行します。
スクリプトの再コンパイルにより、クラス定義が実際には変更されていない (または変更が無害な方法でのみ変更されている) 場合でも、オブジェクトをピクルすることがまったくできなくなります。