Thank you for the answers Terry Reedy and Klaas. > Since you are writing extensions, you can create a built-in subclass of > dict to experiment with. I presume the 2.5 default dict should be a model.
That way it's doable, but I think it's of limited use too; I'd like to remove elements from arbitrary (normal) dicts. Klaas: > Well, you can reduce the memory usage to virtually nothing by using a > generator expression rather than list comprehension. Are you sure? I don't think so. Can you show a little example? As you know this can't work: def filterdict(pred, indict): todel = (k for k,v in indict.iteritems() if not pred(k,v)) for key in todel: del indict[key] d = dict.fromkeys(xrange(8), 0) print d filterdict(lambda k,v: k & 1, d) print d (You can remove elements from the dict and put them into a list, and then put back the elements into the dict, this is probably the only way I know of *theoretically* keeping the memory used about the same with Python. In practice the less memory consuming version may be the filterdict I have shown). > arbitrary python code can be executed by __hash__ > and deleting (DECREF) python objects. I am starting to understand. I'll think more about this. Thank you, bye, bearophile -- http://mail.python.org/mailman/listinfo/python-list