Comment remplacer le copier/propriétédeepcopy opérations pour un objet Python?

Je comprends la différence entre copy vs deepcopy dans le module de copie. J'ai utilisé copy.copy et copy.deepcopy avant de réussir, mais c'est la première fois que j'ai réellement passé à propos de la surcharge de la __copy__ et __deepcopy__ méthodes. J'ai déjà Googlé autour et regarda à travers la intégré dans les modules Python à regarder pour les instances de la __copy__ et __deepcopy__ fonctions (par exemple,sets.py, decimal.py, et fractions.py), mais je ne suis pas encore sûr à 100%, j'ai bien compris.

Voici mon scénario:

J'ai un objet de configuration. D'abord, je vais instancier un objet de configuration par défaut avec un ensemble de valeurs. Cette configuration sera remis à plusieurs autres objets (pour s'assurer que tous les objets commencent avec la même configuration). Cependant, une fois que l'interaction de l'utilisateur démarre, chaque objet a besoin pour peaufiner ses configurations de manière indépendante, sans se tourmenter les uns les autres configurations (qui me dit que je vais avoir besoin de faire des deepcopys de ma première configuration à la main autour d').

Voici un exemple d'objet:

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 

Quelle est la bonne façon de mettre en œuvre la copy et deepcopy méthodes sur cet objet afin de garantir copy.copy et copy.deepcopy me donner le bon comportement?

  • Cela fonctionne? Sont-il des problèmes?
  • Je pensais que j'étais toujours eu des problèmes avec des références partagées, mais il est tout à fait possible, j'ai foiré d'ailleurs. Je vais doubler vérifier basé sur @MortenSiebuhr post quand je reçois une chance et de mise à jour avec les résultats.
  • De mon actuellement compréhension limitée je m'attends à copier.propriétédeepcopy(ChartConfigInstance) pour renvoyer une nouvelle instance qui n'ont pas de références partagées avec l'original (sans réimplanter propriétédeepcopy vous-même). Est-ce incorrect?