newbie question

Emile van Sebille emile at
Sun Jan 13 11:00:04 EST 2002

"rihad" <rihad at> wrote in message
news:mv734u00520kvagkhc13kvlq411phvddjj at
> Hi, I'm new to Python and am making my way through the bundled
> tutorial. As I now understand, variables in Python are really
> references (everything is passed by object reference). If I
have this
> code:
> def f(n, x = []):
>    # some code
> Even if I don't modify x inside f(), is it guaranteed that x
> always be [], that is, the empty list [] will never be shared
> some unrelated reference, which could modify it, and thus
affect what
> x binds to?

x is bound to the list object created at the time the code is
compiled, and all iterations of f() will share x's state.  As
long as you don't modify it within x or hand out a reference to
it, normal non-introspective code won't change it.  You can't
really hide anything in python though, so it is possible to
modify x.  One way, for example:

>>> def f(n, x=[]): print "x is ",x
>>> f(1)
x is  []
>>> f.func_defaults[0].append(0)
>>> f(1)
x is  [0]

Or another way, although I'm sure this breaks in other ways:

>>> def fx(): print ['x']
>>> my_fx = fx
>>> def fy(): print ['y']
>>> fx.func_code = fy.func_code
>>> my_fx()
>>> id(fx) == id(my_fx)

The general rule though is that we're all consenting adults.
Don't do stuff like that.


Emile van Sebille
emile at


More information about the Python-list mailing list