Так просто установить, я чувствую, как я понимаю разницу между copy
VS. deepcopy
в модуле копирования, и я использовал copy.copy
и copy.deepcopy
, прежде чем успешно, но это первый раз, когда я на самом деле пошел о перегрузке __copy__
и __deepcopy__
методов. Я уже работал в Googled и просматривал встроенные модули Python, чтобы искать экземпляры функций и __deepcopy__
(например, sets.py
, decimal.py
и fractions.py
), но я все еще не уверен на 100%, что я прав ,Каков правильный способ переопределить операции копирования/глубокой копии объекта в Python?
Вот мой сценарий:
У меня есть объект конфигурации, в основном только состоит из простых свойств (хотя это потенциально есть списки других непримитивных объектов в нем). Первоначально я собираюсь создать экземпляр одного объекта конфигурации с набором значений по умолчанию. Эта конфигурация будет передана нескольким другим объектам (чтобы все объекты начинались с той же конфигурации). Однако, как только начнется взаимодействие с пользователем, каждый объект должен будет настраивать конфигурации независимо друг от друга, не затрагивая конфигурации друг друга (это говорит мне, что мне нужно будет сделать глубокие копии моей первоначальной конфигурации для раздачи).
Вот пример объекта:
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
дать мне правильное поведение? В настоящее время я использую Python 2.6.2.
Заранее спасибо!
Это работает? Есть проблемы? –
Я думал, что по-прежнему возникают проблемы с общими ссылками, но вполне возможно, что я перепутал в другом месте. Я дважды проверю на основании сообщения @ MortenSiebuhr, когда у меня появится шанс и обновить результаты. –
Из моего ограниченного в настоящее время понимания я бы ожидал, что copy.deepcopy (ChartConfigInstance) вернет новый экземпляр, который не будет иметь общих ссылок с оригиналом (без переопределения самой глубины). Это неверно? – emschorsch