copy vs deepcopy:语义

max*_*max 6 python copy deep-copy python-3.x

我的班级代表各种系统的状态.每个实例都有两个属性:一个是在同一系统的所有状态之间共享的容器,另一个是每个实例唯一的容器.

状态的副本应该重用"共享"属性,但要创建"唯一"属性的深层副本.这实际上是唯一有意义的复制语义(状态的副本是同一系统的状态是很自然的).

我想为阅读和维护我的代码的人创造最少的惊喜.我应该覆盖__deepcopy__还是__copy__为了我的目的?

And*_*ark 4

真的有必要使用复制模块来复制此类的实例吗?我认为您应该为您的类创建一个方法__copy__,而不是重写,该方法使用您定义的复制语义返回一个新对象。__deepcopy__copy

如果出于某种一致性原因您确实需要使用复制模块,那么我认为__deepcopy__更合适。如果所有实例共享一个容器是类的定义行为,那么可以合理地假设 的实现__deepcopy__会尊重这一点。