为什么输入数组在递归函数内发生变化?

时间:2018-12-15 23:40:08

标签: python recursion

我试图了解pyhton中的快速搜索算法。这是我正在处理的代码:

def partition2(a, l, r):
x = a[l]
j = l;
for i in range(l + 1, r + 1):
    if a[i] <= x:
        j += 1
        a[i], a[j] = a[j], a[i]
a[l], a[j] = a[j], a[l]
return j



def randomized_quick_sort(a, l, r):

if l >= r:
    return
k = random.randint(l, r)
a[l], a[k] = a[k], a[l]
#use partition3
m = partition2(a, l, r)


randomized_quick_sort(a, l, m - 1);
randomized_quick_sort(a, m + 1, r);

然后,我将调用此函数定义一个变量。例如:

b = [5,1,4]
randomized_quick_sort(b, 0, 2)

我的问题是,当我尝试在函数调用后打印b时,它打印为[1,4,5]。因此,该数组的值在函数中如何变化???它不是全局变量。乳清函数内部的局部变量会覆盖它吗?请帮助

1 个答案:

答案 0 :(得分:2)

当您将列表作为函数参数提供时,您正在传递指向该列表的指针,这意味着参数}不是其自己的数组,而是指向a的指针。

您要做的是仅提供数组bb的项目

这可以通过以下调整来完成:

randomized_quick_sort()

通知randomized_quick_sort (b[:], 0, 2);而不是b[:]。现在,在调用函数后打印b时,您将拥有与以前相同的值。

您可以找到有关此here

的更多信息