In some languages, you have very fine grained control of the lifetime of a variable by where you declare it. So for example, if you declare a variable in C++ or VB.net or whatever, when you leave the if block, the thing goes away. In Python, we don't have that. And whenever you have an attribute sitting on a class or sitting on instances, unless using slots, I'm not going into that, actually sitting in a dictionary that is a part of that object in memory. There's only to my knowledge, there's only three scopes in Python - global level, module level and function level.