What's the life time of the variable defined in a class function?
Diez B. Roggisch
deets at nospam.web.de
Mon Apr 30 05:20:23 EDT 2007
人言落日是天涯,望极天涯不见家 wrote:
> Please see the followed example:
> class A:
> def __init__(self):
> pass
>
> class X:
> def __init__(self):
> n = 200
> if True:
> j = 200
> m = j
> k = A()
> print m, j
>
> a = X()
> # ?? what about the m, n and j? is it still alive?
> del a
>
> --------------------------
> In C/C++, the life time of m,n and j was the nearest block. but
> obviously, python doen't have this syntax, but I would like to know
> that whether the life time of m, n, j is base on function range or
> the object range.
>
> We can not access the m, n, and j from the outside of class X. Now I'm
> writing a program base on the wxpython. In the __init__ function of
> wx.Panel, I use normal varable(just like the m,n and j) created some
> widgets. It could be show in the window. Does it indicated the life
> time of varable m,n,j is base on the object range?
Python has no variables. It has objects, which can be bound to names. Each
binding to a name will increase a reference counter. Each unbinding will
decrease it. so
a = SomeObject()
b = a
del a
will result in the SomeObject-instance still be alive. But when you add
del b
it will be garbage collected.
Now in your example A() bound to k will not survive the exit of the method,
as that means that k goes out of scope, and the object is bound to - the
A-instance - gets its reference-counter decreased, resulting in it being
freed.
The wxwidgets example though is a different thing. If the panel stores a
reference to the object, e.g. via a list (being part of a list or dict also
increases the reference count), it will be kept around.
Diez
More information about the Python-list
mailing list