> What is your (concrete) use case, by the way?
I try to make it simple (there is almost 25000 lines of code...) I have a sheet with geometrical objects (points, lines, polygons, etc.) The sheet have an object manager. So, to simplify : >>> sheet.objects.A = Point(0, 0) >>> sheet.objects.B = Point(0, 2) >>> sheet.objects.C = Middle(A, B) Then we have : >>> sheet.objects.A == sheet.objects.B True since have and B have the same coordinates. But of course A and B objects are not same python objects. In certain cases, some geometrical objects are automatically referenced in the sheet, without being defined by the user. (Edges for polygons, for example...) But they must not be referenced twice. So if the edge of the polygon is already referenced (because the polygon uses an already referenced object for its construction...), it must not be referenced again. However, if there is an object, which accidentally have the same coordinates, it must be referenced with a different name. So, I use something like this in 'sheet.objects.__setattr__(self, name, value)': if type(value) == Polygon: for edge in value.edges: if edge is_in sheet.objects.__dict__.itervalues(): object.__setattr__(self, self.__new_name(), edge) Ok, I suppose it's confused, but it's difficult to sum up. ;-) > Another possibility :-) > from itertools import imap > id(x) in imap(id, items) I didn't know itertools. Thanks :-) -- http://mail.python.org/mailman/listinfo/python-list