我在文档中看到,有一个__deepcopy__
方法可用于将deepcopy
的行为扩展到内置类型之外。但是,NamedTuple
(typing
模块中的类版本)的文档没有提及任何内容。但是,由于它为哈希和相等性测试提供了默认值,所以我想知道,它是否也为深度复制提供了默认值?
答案 0 :(得分:5)
NamedTuple
不需要定义特殊的__deepcopy__
处理程序,但不需要。 __deepcopy__
仅用于覆盖/自定义默认的深层复制行为(仅使用pickle
特殊方法__reduce_ex__
或__reduce__
)。对于用Python定义的类(与C扩展类型相对),默认行为通常是正确/完整。 object
本身为所有非扩展类型提供了有用的默认酸洗行为,假设它们的所有属性本身都是可酸洗的,例如没有打开的文件对象等。
由于NamedTuple
是Python级别的,并且没有特殊的复制需求,因此不必费心实现自定义处理程序。只有在您的NamedTuple
的某些属性不可拾取并且自己没有定义__deepcopy__
的情况下,您才需要这样做。