On Fri, 07 Jan 2011 16:47:55 +0200, kost BebiX wrote: > Well, actually the code you showed doesn't work)
Actually, it does. It just prints a warning message as well. Look carefully: >>>> class A(object): > .. def __init__(self): > .. self.d = {} > .. def __getattr__(self, key): > .. try: > .. return self.d[key] > .. except KeyError: > .. raise AttributeError >>>> from copy import deepcopy >>>> a = A() >>>> deepcopy(a) > Exception RuntimeError: 'maximum recursion depth exceeded while calling > a Python object' in <type 'exceptions.AttributeError'> ignored > Exception RuntimeError: 'maximum recursion depth exceeded while calling > a Python object' in <type 'exceptions.AttributeError'> ignored > 0: <__main__.A object at 0xda0250> The last thing printed is the deepcopied object. I've tested the above code in Python versions 2.4 through 3.2 and the only one that prints that message is 2.6. -- Steven -- http://mail.python.org/mailman/listinfo/python-list