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

2024-10-02 20:31:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我被下面的例子弄糊涂了。让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应该是一个局部变量


Tags: 函数代码in文档内容列表fordef
1条回答
网友
1楼 · 发布于 2024-10-02 20:31:51

arr是对列表对象的引用

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

相关问题 更多 >