7

I am trying to change global value x from within another functions scope as the following code shows,

x = 1
def add_one(x):
    x += 1

then I execute the sequence of statements on Python's interactive terminal as follows.

>>> x
1
>>> x += 1
>>> x
2
>>> add_one(x)
>>> x
2

Why is x still 2 and not 3?

2

1 Answer 1

7

Because x is a local (all function arguments are), not a global, and integers are not mutable.

So x += 1 is the same as x = x + 1, producing a new integer object, and x is rebound to that.

You can mark x a global in the function:

def add_one():
    global x
    x += 1

There is no point in passing in x as an argument here.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.