objectif
Contrôler la copie profonde d’un objet en implémentant deepcopy.
code minimal
import copy
class C:
def __init__(self, x): self.x = x
def __deepcopy__(self, memo):
return C(self.x) # exemple simple
a = C([1]); b = copy.deepcopy(a)
print(a is not b and a.x == b.x) # attendu: True
utilisation
import copy
class Node:
def __init__(self, name, children=None): self.name=name; self.children=children or []
def __deepcopy__(self, memo):
cls = self.__class__
dup = cls(self.name, [])
memo[id(self)] = dup
dup.children = [copy.deepcopy(ch, memo) for ch in self.children]
return dup
root = Node("r", [Node("c")])
clone = copy.deepcopy(root)
print(clone is not root and clone.children[0].name == "c")
variante(s) utile(s)
import copy
print(callable(copy.deepcopy))
notes
- Respectez le dict memo pour éviter la duplication de graphes cycliques.
- Implémentez aussi copy pour la copie superficielle si besoin.