(original) (raw)

import gc, weakref def test_container_iterator(i): class C(object): pass obj = C() ref = weakref.ref(obj) if i == 1: container = (obj,) elif i==2: container = [obj,] elif i==3: container = {obj: 1} elif i==4: container = {1: obj} print "Container:", container, obj.x = iter(container) del obj, container gc.collect() if ref() is None: print "OK" else: print "Cycle was not collected!!" # Break the cycle del ref().x # Now it is. assert ref() is None test_container_iterator(1) test_container_iterator(2) test_container_iterator(3) test_container_iterator(4)