我明白在复制模块中 copy
和 deepcopy
的区别。我以前成功地使用过 copy.copy
和 copy.deepcopy
,但这是我第一次实际上重载 __copy__
和 __deepcopy__
方法。我已经用谷歌搜索了一遍并查看了内置的 Python 模块,寻找 __copy__
和 __deepcopy__
函数的实例(例如 sets.py
、 decimal.py
和 deepcopy
0) ,但是我仍然不能100% 确定我是正确的。
我的设想是这样的:
我有一个配置对象。首先,我将用一组默认值实例化一个配置对象。这个配置将传递给多个其他对象(以确保所有对象都以相同的配置开始)。然而,一旦用户交互开始,每个对象都需要独立地调整其配置,而不影响其他对象的配置(这意味着我需要制作初始配置的深拷贝以便传递)。
下面是一个示例对象:
class ChartConfig(object):
def __init__(self):
#Drawing properties (Booleans/strings)
self.antialiased = None
self.plot_style = None
self.plot_title = None
self.autoscale = None
#X axis properties (strings/ints)
self.xaxis_title = None
self.xaxis_tick_rotation = None
self.xaxis_tick_align = None
#Y axis properties (strings/ints)
self.yaxis_title = None
self.yaxis_tick_rotation = None
self.yaxis_tick_align = None
#A list of non-primitive objects
self.trace_configs = []
def __copy__(self):
pass
def __deepcopy__(self, memo):
pass
在这个对象上实现 copy
和 deepcopy
方法以确保 copy.copy
和 copy.deepcopy
给我正确的行为的正确方法是什么?