Python 知道我在快速排序中为两个函数使用的列表是相同的吗?

Python knows that the list I am using for both functions in quicksort are the same?

我在 Python 中使用快速排序算法,它交换值。我的问题是 Python 如何知道我在 Partition 和 quicksort 函数中使用相同的列表?

正如您在下面的快速排序代码中看到的那样,值位置的交换只发生在分区函数中。然而,无需对快速排序函数执行 return 列表,它知道我交换了分区中列表值的位置,从而打印排序后的列表。

def quicksort(lst, start = 0, end = None): 
    if end is None:
        end = len(lst) - 1
    if start >= end:
        return
    p = partition(lst, start, end)
    quicksort(lst, start, p-1)
    quicksort(lst, p+1, end)

def partition(lst, start, end):
    pivot = lst[start]
    low = start + 1
    high =  end
    while low <= high:
        while lst[low] <= pivot:
            low +=  1
        while lst[high] >= pivot:
            high -= 1
        if low <= high: 
            lst[low], lst[high] = lst[high], lst[low]
            low += 1
            high -= 1

    lst[start], lst[high] = lst[high], lst[start]
    return high
numbers = [7, 6, 2, 4, 9, 1000]
quicksort(numbers)
print(numbers)

如果我问了一些多余的东西,请接受我的谦虚道歉,因为我找不到任何与此相关的信息。我目前正在通过 team treehouse 学习算法,但是除了关于 quicksort 的视频没有太多解释之外,他们似乎没有任何相关内容。如果您知道某个地方有更多这方面的信息,如果您能与我分享,将不胜感激!谢谢。

这是因为在 python 中值是通过引用传递的。当您将 lst 传递给 partition 函数时,您实际上是在 quicksort 函数中传递对列表的引用,而不是列表的副本。