I *think* Python uses reference counting for garbage collection. I've heard talk of people wanting to change this (to mark and sweep?). Anyway, Python stores a counter with each object. Everytime you make a reference to an object this counter is increased. Everytime a pointer to the object is deleteted or reassigned the counter is decreased. When the counter reaches zero the object is freed from memory. A flaw with this algorithm is that if you create a circular reference the object will never be freed. A linked list where the tail points to the head will have a reference count of 1 for each node, after the head pointer is deleted. So the list is never freed. Make sure you are not creating a circular reference. Something like this:
a = [1, 2, 3, 4, 5, 6] b = ['a', 'b', 'c', 'd'] c = [10, 20, 30, 40] a[3] = b b[1] = c c[0] = a the last assignment creates a circular refence, and until it is removed, non of these objects will be removed from memory. I'm not an expert on python internals, and it is possible that they have a way of checking for cases like this. I think the deepcopy method catches this, but I don't *think* basic garbage collection look for this sort of thing. David -- http://mail.python.org/mailman/listinfo/python-list