I know this should be a classic welcome post but, there is few errors you need to solve before you sleep:
import weakref class Foo(object): pass def callback(x): del lst[:] keepalive =  for i in range(100): lst = [str(i)] foo = Foo() foo.cycle = foo keepalive.append(weakref.ref(foo, callback)) del foo while lst: keepalive.append(lst[:])
As @someone said,
Debugging is twice as hard as writing the code in the first place. Therefore, if...