Can anyone explain to me why the two functions below a
and b
are behaving differently. Function a
changes names
locally and b
changes the actual object.
Where can I find the correct documentation for this behavior?
def a(names):
names = ['Fred', 'George', 'Bill']
def b(names):
names.append('Bill')
first_names = ['Fred', 'George']
print "before calling any function",first_names
a(first_names)
print "after calling a",first_names
b(first_names)
print "after calling b",first_names
Output:
before calling any function ['Fred', 'George']
after calling a ['Fred', 'George']
after calling b ['Fred', 'George', 'Bill']
Assigning to parameter inside the function does not affect the argument passed. It only makes the local variable to reference new object.
While, list.append
modify the list in-place.
If you want to change the list inside function, you can use slice assignment:
def a(names):
names[:] = ['Fred', 'George', 'Bill']
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With