我被下面的例子弄糊涂了。让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
引用一个新对象,它不会影响以前的对象相关问题 更多 >
编程相关推荐