`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__
.
时,您才需要自己这样做
我在文档中看到有一个 __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__
.