简体   繁体   中英

How does array assignment work within a python function?

I'm confused by the following example. Let a=[1] be a python list and try to write a function which re-assigns the list such that we will have a=[2] after running the function.

A simple function which works is

def works1(arr):
    arr[0]=2

or another example is

def works2(arr):
    arr[0]=2*arr[0]

Either does what I would want when running works1(a) or works2(a) : both set a=[2] .

However, something like the following which tries to re-assign the entire array at once, rather than doing it component-by-component, will fail.

def fails1(arr):
    arr=[2*x for x in arr]

Running fails1(a) does not reassign a , which is still given by a=[1] .

Could someone please explain this behavior or point me to where in the documentation I should be looking to understand the above?

Edit: For context, if helpful, I was trying to understand why the mergeSort code at this site was able to re-assign an externally defined list. Initially thought that alist within that mergeSort code should be a local variable.

arr is a reference to a list object

When you write arr[0]=1 you change the element in this referenced object. But when you write arr=[..new list..] you just make arr refer to a new object, and it does not affect previous object.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM