# coding: latin-1 import copy class Objet1 : def __init__ (self, i) : self.i = i def __str__ (self) : return "o1 " + str (self.i) + " : " + str (self.o2.i) class Objet2 : def __init__ (self, i, o) : self.i = i self.o1 = o o.o2 = self def __str__ (self) : return "o2 " + str (self.i) + " : " + str (self.o1.i) def __deepcopy__ (self,memo) : return Objet2 (self.i, self.o1) o1 = Objet1 (1) o2 = Objet2 (2, o1) print o1 # affiche o1 1 : 2 print o2 # affiche o2 2 : 1 o3 = copy.deepcopy (o2) o3.i = 4 print o1 # affiche o1 1 : 4 --> on voudrait 2 print o2 # affiche o2 2 : 1 print o3 # affiche o2 4 : 1