import weakref, gc class O(object): pass os = [] #od = weakref.WeakKeyDictionary() od = weakref.WeakValueDictionary() for i in range(10): o1 = O() o2 = O() os.append((o1, o2)) od[o1] = o2 i = 0 for x in od: i += 1 if i == 5: del os gc.collect()