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

2024-05-12 15:57:10 发布

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

我试图理解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]。那么,这个数组的值在函数中是如何变化的???它不是全局变量。为什么函数中的局部变量会覆盖它??请帮忙


Tags: 函数代码inforpyhtonreturnifdef
1条回答
网友
1楼 · 发布于 2024-05-12 15:57:10

当您提供一个列表作为函数参数时,您传递的是指向该列表的指针,这意味着参数a不是它自己的数组,而是指向b的指针。你知道吗

您要做的是只提供数组brandomized_quick_sort()的项

这可以通过进行以下调整来实现:

randomized_quick_sort (b[:], 0, 2);

注意b[:]而不是b。现在,当您在调用函数后打印b时,您将拥有与之前相同的值。你知道吗

您可以找到有关此here的更多信息

相关问题 更多 >