from __future__ import print_function class MyClass: num_instances = 0 def __init__(self, value): self.value = value MyClass.num_instances += 1 def __del__(self): MyClass.num_instances -= 1 print("There should be no instances yet:", MyClass.num_instances) inst = MyClass("hello") print("There should be one instance:", MyClass.num_instances) def f(): print("f started with:", MyClass.num_instances) f_inst = MyClass("f") print("f returning with:", MyClass.num_instances) f() # When f returns, the local variable f_inst is deleted so # there should be exactly as many as we started with print("There is now:", MyClass.num_instances)