我想深度复制一个类的所有实例,但不复制给定类的定义和规则。
预期用途是,假设我有“OriginalClass”类,它的实例是我存储的变量。当程序继续运行时,我希望能够使用 OriginalClass 以前的“快照”,我将只使用其中的值(我不会在那里存储新的值,因此不需要继承任何规则)。
上面的简单示例有效,并且与我想要做的非常相似:
import copy
class VM:
#nothing in the class
pass
VM1=VM()
VM1.test=dict()
VM1.test['one']="hello"
def printmytext(VMPast=copy.deepcopy(VM1)):
g.es(VMPast.test['one'])
VM1.test="Bye"
printmytext() #Returns "hello"
但这个想法是替代:
VMPast=copy.deepcopy(VM1)
对于我不知道如何编写的工作代码,它将复制实例和字典,但不会复制定义。
原因是,在我的程序中使用 deepcopy 版本时(这样:)
VMPast=copy.deepcopy(VM1)
VM1.MyMethod(VMPast.MyButton[-1])
它引发以下错误:
AttributeError: AttributeSetter instance has no __call__ method
因为价值:
VMPast.MyButton[-1]
被发送为:
'__deepcopy__'
而不是我想要的实际替换值......(按钮),所以如果 VMPast 已经是 VM 内实例的工作副本,那么这将在返回deepcopy的情况下起作用!另一件事是,实例是动态的,我事先不知道原始类在那一刻将具有的名称或值。非常感谢!