Issue 26659: slice() leaks memory when part of a cycle (original) (raw)

The slice type doesn't participate in GC, which means that if you happen to create a cycle involving a slice, that cycle will never get freed. Here's an example:

def f(): l = [] l.append(slice(l))

Will consume memory without bound:

while True: f()

This seems pretty hard to trigger accidentally, so it might not be a huge deal -- especially since it seems to have been around for a while. (I only checked 2.7 and trunk though.)

I think this could be solved by either having the slice class participate in GC (ie add tp_traverse and tp_clear methods), or maybe doing some type-filtering during slice_new().