I defined the following function:
def myFunction(a):
print(f'In function, initial a = {a}, {id(a)}, {type(a)}')
a = a*10
print(f'In function, final a = {a}, {id(a)}, {type(a)}')
return a
When I try calling it like so:
a_list_var = [3]
print(f'In main script, initial a_list_var = {a_list_var}, {id(a_list_var)}, {type(a_list_var)}')
myFunction(a_list_var)
print(f'In main script, final a_list_var = {a_list_var}, {id(a_list_var)}, {type(a_list_var)}')
I get this result:
In main script, initial a_list_var = [3], 139940245107776, <class 'list'>
In function, initial a = [3], 139940245107776, <class 'list'>
In function, final a = [3, 3, 3, 3, 3, 3, 3, 3, 3, 3], 139940654735936, <class 'list'>
In main script, final a_list_var = [3], 139940245107776, <class 'list'>
As far as I understand, function arguments in Python get passed "by reference". Since lists are mutable objects, I expected a_list_var
to get altered in-place after calling myFunction()
. But in this case, looking at the id
s of a_list_var
and a
, it seems like a_list_var
got passed "by value". Why?