python 函数中的数组赋值如何工作?

How does array assignment work within a python function?

我对以下示例感到困惑。让 a=[1] 成为一个 python 列表并尝试编写一个重新分配列表的函数,这样我们将在 运行 函数之后有 a=[2]

一个有效的简单函数是

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

或者另一个例子是

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

在 运行 works1(a)works2(a) 时做我想要的:都设置 a=[2].

但是,像下面这样尝试一次重新分配整个数组而不是逐个组件地重新分配的操作将会失败。

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

运行fails1(a)不重新赋值a,依然是a=[1].

有人可以解释一下这种行为,或者指出我应该在文档中的哪个位置来理解上述内容吗?

编辑:对于上下文,如果有帮助的话,我试图理解为什么 this site 处的 mergeSort 代码能够重新分配外部定义的列表。最初以为mergeSort代码中的alist应该是局部变量。

arr 是对列表对象的引用

当您编写 arr[0]=1 时,您更改了该引用对象中的元素。 但是当你写 arr=[..new list..] 你只是让 arr 引用一个新对象,它不会影响以前的对象。