我对下面的例子感到困惑。 让我们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]
给出。
有人可以解释这种行为或指出我应该在文档中的哪个位置了解上述内容吗?
编辑:对于上下文,如果有帮助,我试图理解为什么该站点的mergeSort
代码能够重新分配外部定义的列表。 最初认为该mergeSort
代码中的alist
应该是局部变量。
>arr
是对列表对象的引用
编写arr[0]=1
时,将更改此引用对象中的元素。 但是当你写arr=[..new list..]
你只是arr
引用一个新对象,它不会影响以前的对象。