如何覆盖Python对象的复制/深复制操作?

10 浏览
0 Comments

如何覆盖Python对象的复制/深复制操作?

我理解copy模块中copy和deepcopy的区别。我以前成功地使用过copy.copy和copy.deepcopy,但这是我第一次尝试重载__copy__和__deepcopy__方法。我已经在谷歌上搜索并查看了内置的Python模块,以寻找__copy__和__deepcopy__函数的示例(例如sets.py,decimal.py和fractions.py),但我仍然不确定自己是否完全正确。

这是我的情景:

我有一个配置对象。最初,我将用默认值实例化一个配置对象。这个配置将被传递给多个其他对象(以确保所有对象都以相同的配置开始)。然而,一旦用户交互开始,每个对象都需要独立地调整自己的配置,而不会影响其他对象的配置(这让我觉得我需要对初始配置进行深拷贝以传递)。

这是一个示例对象:

class ChartConfig(object):
    def __init__(self):
        #绘图属性(布尔值/字符串)
        self.antialiased = None
        self.plot_style = None
        self.plot_title = None
        self.autoscale = None
        #X轴属性(字符串/整数)
        self.xaxis_title = None
        self.xaxis_tick_rotation = None
        self.xaxis_tick_align = None
        #Y轴属性(字符串/整数)
        self.yaxis_title = None
        self.yaxis_tick_rotation = None
        self.yaxis_tick_align = None
        #非原始对象的列表
        self.trace_configs = []
    def __copy__(self):
        pass
    def __deepcopy__(self, memo):
        pass 

如何正确实现这个对象的copy和deepcopy方法,以确保copy.copy和copy.deepcopy给出正确的行为?

0