【发布时间】:2018-08-17 18:45:49
【问题描述】:
我在文档中看到有一个__deepcopy__ 方法可用于将deepcopy 的行为扩展到内置类型之外。但是,NamedTuple(typing 模块中的类版本)的文档没有提及任何内容。但是由于它为哈希和相等测试提供了默认值,我想知道它是否也为深度复制提供了默认值?
【问题讨论】:
标签: python python-3.x deep-copy
我在文档中看到有一个__deepcopy__ 方法可用于将deepcopy 的行为扩展到内置类型之外。但是,NamedTuple(typing 模块中的类版本)的文档没有提及任何内容。但是由于它为哈希和相等测试提供了默认值,我想知道它是否也为深度复制提供了默认值?
【问题讨论】:
标签: python python-3.x deep-copy
NamedTuple 没有定义特殊的__deepcopy__ 处理程序,但它不需要。 __deepcopy__ 只需要覆盖/自定义默认的深层复制行为(仅使用 pickle 特殊方法,__reduce_ex__ 或 __reduce__);对于在 Python 中定义的类(与 C 扩展类型相反),默认行为通常是正确/完整的。 object 本身为所有非扩展类型提供了有用的默认酸洗行为,假设它们的所有属性本身都是可酸洗的,例如没有打开的文件对象等。
由于NamedTuple 是 Python 级别的,并且没有特殊的复制需求,因此无需费心实现自定义处理程序。仅当您的 NamedTuple 的某些属性不可提取并且本身未定义 __deepcopy__ 时,您才需要自己这样做。
【讨论】: