Eu entendo a diferença entre copy
e deepcopy
no módulo de cópia. Usei copy.copy
e copy.deepcopy
antes com sucesso, mas esta é a primeira vez que realmente estou sobrecarregando os métodos __copy__
e __deepcopy__
. Eu já pesquisei ao redor e olhou através do built-in módulos Python para procurar instâncias do __copy__
e __deepcopy__
funções (por exemplo sets.py
, decimal.py
e fractions.py
), mas eu ainda não estou 100% de certeza que eu entendi direito.
Aqui está o meu cenário:
Eu tenho um objeto de configuração. Inicialmente, vou instanciar um objeto de configuração com um conjunto padrão de valores. Esta configuração será entregue a vários outros objetos (para garantir que todos os objetos comecem com a mesma configuração). No entanto, uma vez que a interação do usuário começa, cada objeto precisa ajustar suas configurações independentemente, sem afetar as configurações uns dos outros (o que me diz que vou precisar fazer cópias profundas de minha configuração inicial para entregar).
Aqui está um objeto de amostra:
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
Qual é a maneira correta de implementar os métodos copy
e deepcopy
neste objeto para garantir copy.copy
e copy.deepcopy
fornecer o comportamento adequado?