【问题标题】:Does `copy.deepcopy` work with `NamedTuple`s in Python?`copy.deepcopy` 是否与 Python 中的 `NamedTuple` 一起使用?
【发布时间】:2018-08-17 18:45:49
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    由于NamedTuple 是 Python 级别的,并且没有特殊的复制需求,因此无需费心实现自定义处理程序。仅当您的 NamedTuple 的某些属性不可提取并且本身未定义 __deepcopy__ 时,您才需要自己这样做。

    【讨论】:

      猜你喜欢
      • 2020-01-15
      • 2020-06-11
      • 2017-11-10
      • 2010-11-27
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多