【发布时间】:2018-06-28 13:28:48
【问题描述】:
我想在 python 中制作一个类实例的副本。我尝试了copy.deepcopy,但收到错误消息:
RuntimeError: 目前只有用户显式创建的变量(图叶)支持 deepcopy 协议
所以假设我有类似的东西:
class C(object):
def __init__(self,a,b, **kwargs):
self.a=a
self.b=b
for x, v in kwargs.items():
setattr(self, x, v)
c = C(4,5,'r'=2)
c.a = 11
del c.b
现在我想制作一个相同的c 的深层副本,有没有简单的方法?
【问题讨论】:
-
是的。确实。覆盖
__copy__dunder。或者__deepcopy__一个,这取决于您的需要。 -
是的,您可以使用
copy.deepcopy。所以只是c2 = copy.deepcopy(c)然后vars(c2) == {'a': 11, 'r': 2}和vars(c) == {'a': 11, 'r': 2}但是你报告的回溯不会由你给出的类定义产生...... -
@cᴏʟᴅsᴘᴇᴇᴅ 注意,在这种情况下不需要。
copy模块将处理未定义__copy__或__deepcopy__的类型运行时错误。 -
@juanpa.arrivillaga 嗯...嗯...简历是“离题”吗?我已经投票了。
-
@juanpa.arrivillaga 是的,实际上我正在尝试复制
torch.nn.Module的元类,但这有点复杂,所以我在这里举一个更简单的例子。只是说明在我的情况下deepcopy不起作用,所以我想要另一个解决方案。