Я розумію різницю між модулем копіювання copy
та проти deepcopy
. Я використовував copy.copy
і copy.deepcopy
раніше успішно, але це перший раз, коли я насправді перейшов до перевантаження методів __copy__
і __deepcopy__
. Я вже Гугл і подивився через вбудовані модулі Python шукати екземпляри __copy__
і __deepcopy__
функції (наприклад sets.py
, decimal.py
і fractions.py
), але я до сих пір не 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
забезпечити мені належну поведінку?