Capisco la differenza tra copy
vs. deepcopy
nel modulo di copia. Ho usato copy.copy
e copy.deepcopy
prima con successo, ma questa è la prima volta che ho effettivamente sovraccaricato i metodi __copy__
e __deepcopy__
. Ho già Googled intorno e guardato attraverso il built-in moduli Python per cercare istanze del __copy__
e __deepcopy__
funzioni (ad esempio sets.py
, decimal.py
e fractions.py
), ma non sono ancora sicuro al 100% che ho capito bene.
Ecco il mio scenario:
Ho un oggetto di configurazione. Inizialmente, creerò un'istanza di un oggetto di configurazione con un set di valori predefinito. Questa configurazione verrà trasferita a più altri oggetti (per garantire che tutti gli oggetti inizino con la stessa configurazione). Tuttavia, una volta avviata l'interazione con l'utente, ogni oggetto deve modificare le proprie configurazioni in modo indipendente senza influire sulle configurazioni dell'altro (il che mi dice che dovrò fare delle copie profonde della mia configurazione iniziale da consegnare).
Ecco un oggetto di esempio:
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 è il modo giusto per implementare i metodi copy
e deepcopy
su questo oggetto per garantire copy.copy
e copy.deepcopy
fornire il comportamento corretto?