前提: Python object が与えられた場合obj
、それをランダムな関数に渡したいと思います。関数が完了したら、obj
元の状態にリセットするオプションが必要です。obj
さらに、他のコードが元の状態にアクセスする可能性があるため、実際の変更を行うことはできません。
最適なソリューションは、大規模なobj
ものがわずかに変更された一般的なケースでは迅速に行われる必要があります。obj
をロールバックする必要があるまれなケースのパフォーマンスはそれほど重要ではありません。
これらの要件は、単純にオブジェクトをコピーするというブルート フォース ソリューションとは直交しています。一般的なケースでは途方もなく遅く、まれなロールバックでは非常に高速です。
通常、このソリューションでは、オブジェクトを処理するコードがオブジェクトを通常のオブジェクトとして処理できるようにする必要があります。これには、カスタム クラスを含むあらゆる種類の属性の割り当てが含まれます。明らかに、ソリューションではオブジェクト ツリー全体を考慮する必要があります。いくつかの譲歩が必要な場合があります。これまでのソリューションで検討した制限の例には、非基本型がすべて特別な基本クラスから継承することを要求すること、タプルとカスタム dict クラスと引き換えに dict とリストを許可しないことが含まれます。大アルカナは許容される場合があります。
私はこれにしばらく取り組んできましたが、経験豊富な Python ウィザードがどのようなアイデアや提案を持っているかを知りたいと思っています。
編集:フレッドの答えにより、要件が欠落していることに気付きました:
obj
元の状態も価値があるため、元に変更を加えることはできません。