前提:给定一个 Python 对象obj
,我想将它传递给一些随机函数,并且,当函数完成时,我需要重置obj
为原始状态的选项。此外,不能对它进行实际更改,obj
因为其他代码可能仍希望访问它的原始状态。
obj
在一个大的只是稍微修改的常见情况下,最佳解决方案应该很快。obj
需要回滚的罕见情况下的性能不太重要。
这些要求与简单地复制对象的蛮力解决方案是正交的:在常见情况下它会非常慢,而对于不常见的回滚来说却非常快。
该解决方案通常应允许处理对象的代码将其视为普通对象。这包括为其分配各种属性,包括自定义类。显然,解决方案需要考虑到整个对象树。可能需要一些让步。到目前为止,我在我的解决方案中考虑的限制示例包括要求非基本类型都继承自一个特殊的基类,不允许 dicts 和列表以换取元组和自定义 dict 类等。主要的奥秘是可以接受的。
我已经为此工作了一段时间,并且很想看看更有经验的 Python 向导是否有什么想法和建议。
编辑:Fred 的回答让我意识到了一个缺失的要求:不能对 original 进行任何更改
obj
,因为原始状态也很有价值。