import gc counter = 100 class Dispenser(object): def __enter__(self): global counter self.val = [counter] # Proxy for VecGetArray -> numpy view counter += 1 return self.val def __exit__(self,*args): reflist = gc.get_referrers(self.val) n = len(reflist) print('__exit__: %r, nrefs=%r, refs=%r' % (self.val, n, reflist)) def main(): with Dispenser() as a, Dispenser() as b, Dispenser() as c: x = [a,c] # Proxy for referencing memory through a numpy view ## pre-2.7 # with Dispenser() as a: # with Dispenser() as b: # with Dispenser() as c: # x = [a,c] if __name__ == '__main__': main()