How can python function actually change the parameter rather than the formal parameter?
<p>I am trying to code "1024" using python basic library. In the process I try to make a list [0, 2, 4, 4] become [0, 2, 8, 0]. So here is my test code. It's very easy one.</p>

<pre><code>    def merger(a, b):
        if a == b:
        a += b
        b = 0


    numlist = [0, 2, 4, 4]
    merger(numlist[0], numlist[1])
    merger(numlist[1], numlist[2])
    merger(numlist[2], numlist[3])
    print (numlist)
</code></pre>

<p>So when I try to conduct merge. I expected the output [0, 2, 8, 0]. However it gives me [0, 2, 4, 4] instead. I think maybe it's because I just changed the local variable of my function a b rather than the actual parameter? But If I want this to happen, what should I do? Thx!</p>

<p>I think I want to know generally if I want a function not return anything but just change value of the variable I passed as parameter. How can I achieve it?</p>

<p>You can pass the list and indexes to the function:</p>

<pre><code>def merger(l, a, b):
    if l[a] == l[b]:
        l[a] += l[b]
        l[b] = 0

numlist = [0, 2, 4, 4]
merger(numlist, 0, 1)
merger(numlist, 1, 2)
merger(numlist, 2, 3)
print(numlist)
</code></pre>

<p>As list object will be passed by reference and any changes on the list inside the function will be effective after the function call.</p>

python function syntax