{copy.deepcopy`是否可以在Python中与NamedTuple`s一起使用?

时间:2018-08-17 18:45:49

标签: python python-3.x deep-copy

我在文档中看到,有一个__deepcopy__方法可用于将deepcopy的行为扩展到内置类型之外。但是,NamedTupletyping模块中的类版本)的文档没有提及任何内容。但是,由于它为哈希和相等性测试提供了默认值,所以我想知道,它是否也为深度复制提供了默认值?

1 个答案:

答案 0 :(得分:5)

NamedTuple不需要定义特殊的__deepcopy__处理程序,但不需要。 __deepcopy__仅用于覆盖/自定义默认的深层复制行为(仅使用pickle特殊方法__reduce_ex____reduce__)。对于用Python定义的类(与C扩展类型相对),默认行为通常是正确/完整。 object本身为所有非扩展类型提供了有用的默认酸洗行为,假设它们的所有属性本身都是可酸洗的,例如没有打开的文件对象等。

由于NamedTuple是Python级别的,并且没有特殊的复制需求,因此不必费心实现自定义处理程序。只有在您的NamedTuple的某些属性不可拾取并且自己没有定义__deepcopy__的情况下,您才需要这样做。