`copy.deepcopy` 是否与 Python 中的 `NamedTuple` 一起使用?

Does `copy.deepcopy` work with `NamedTuple`s in Python?

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

NamedTuple 没有定义特殊的 __deepcopy__ 处理程序,但它不需要。 __deepcopy__ 只需要 override/customize 默认的深度复制行为(只使用 pickle 特殊方法,__reduce_ex____reduce__);对于 Python 中定义的 类(与 C 扩展类型相反),默认行为通常是 correct/complete。 object 本身为所有非扩展类型提供了有用的默认 pickling 行为,假设它们的所有属性本身都是可 picklable 的,例如没有打开的文件对象等。

由于NamedTuple是Python级别,并且没有特殊的复制需求,所以懒得去实现自定义处理程序。仅当 NamedTuple 的某些属性不可腌制并且它们本身不定义 __deepcopy__.

时,您才需要自己这样做