Rozumiem różnicę między copy
a deepcopy
w module kopiowania. Używałem copy.copy
i copy.deepcopy
wcześniej z powodzeniem, ale to jest pierwszy raz, kiedy faktycznie przeładowałem metody __copy__
i __deepcopy__
. Już Googled się i spojrzał przez wbudowany w modułach Pythona szukać wystąpień __copy__
i __deepcopy__
funkcji (np sets.py
, decimal.py
i fractions.py
), ale nadal nie jestem w 100% pewien, że mam rację.
Oto mój scenariusz:
Mam obiekt konfiguracyjny. Początkowo zamierzam utworzyć wystąpienie jednego obiektu konfiguracyjnego z domyślnym zestawem wartości. Ta konfiguracja zostanie przekazana do wielu innych obiektów (aby zapewnić, że wszystkie obiekty będą miały taką samą konfigurację). Jednak po rozpoczęciu interakcji z użytkownikiem każdy obiekt musi niezależnie dostosować swoje konfiguracje, nie wpływając na wzajemne konfiguracje (co mówi mi, że będę musiał wykonać głębokie kopie mojej początkowej konfiguracji).
Oto przykładowy obiekt:
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
Jaki jest właściwy sposób wdrożenia metod copy
i deepcopy
na tym obiekcie, aby zapewnić copy.copy
i copy.deepcopy
zapewnić mi właściwe zachowanie?