python - Explain this inconsistency -
this question has answer here:
here 2 methods. 1 modifies variable x, other not. can please explain me why is?
x = [1,2,3,4] def switch(a,b,x): x[a], x[b] = x[b], x[a] switch(0,1,x) print(x) [2,1,3,4] def swatch(x): x = [0,0,0,0] swatch(x) print(x) [2,1,3,4]
the function definition
def swatch(x): defines x local variable.
x = [0, 0, 0, 0] reassigns local variable x new list. not affect global variable x of same name.
you remove x arguments of swatch:
def swatch(): x = [0, 0, 0, 0] but when python encounters assignment inside function definition like
x = [0, 0, 0, 0] python consider x local variable default. assigning values x not affect global variable, x.
to tell python wish x global variable, need use global declaration:
def swatch(): global x x = [0,0,0,0] swatch() however, in case, since x mutable, define swatch this:
def swatch(x): x[:] = [0,0,0,0] although x inside swatch local variable, since swatch called
swatch(x) # global variable x it points same list global variable of same name.
x[:] = ... alters contents of x, while x still points original list. thus, alters value global variable x points too.
def switch(a,b,x): x[a], x[b] = x[b], x[a] is example contents of x mutated while x still points original list. mutating local x alters global x well.
Comments
Post a Comment