Python:函数不改变数组中的元素

Python:函数不改变数组中的元素,python,variables,Python,Variables,我知道在Python中,变量是通过给对象一个引用副本来传递的。但是我不明白为什么在我写的下面的代码中,函数分区没有改变arr的元素 这似乎是一个bug: Assume arr = [1,3,4,7,5,8], lo=3, hi=6 def Partition(arr, lo, hi): pivot = arr[lo] <- this is arr[3] = 7 i = lo <- i = 3 j = hi while(Tr

我知道在Python中,变量是通过给对象一个引用副本来传递的。但是我不明白为什么在我写的下面的代码中,函数分区没有改变arr的元素


这似乎是一个bug:

Assume arr = [1,3,4,7,5,8], lo=3, hi=6
def Partition(arr, lo, hi):
    pivot = arr[lo]  <- this is arr[3] = 7   
    i = lo           <- i = 3 
    j = hi
    while(True):
        while(arr[i] < pivot): <- arr[3] = 7 so condition fails hence no swap
你的配分函数有一个逻辑问题。 如果使用调试器跟踪它,您将看到它总是在返回之前将数组恢复到初始状态。数组实际上会被视为已修改,问题是在对其进行一段时间的修改后,它会恢复到进入函数时的状态

你使用调试工具吗?如果没有,现在就开始。 如果是这样,请在returnj语句上放置一个断点,然后检查数组,您将了解我的意思

您正在尝试实现霍尔分区,对吗? 我想你有点搞混了。问题在于,在第一次循环迭代之前,您正在与pivot进行比较,最后您将再次比较刚刚交换的元素

Assume arr = [1,3,4,7,5,8], lo=3, hi=6
def Partition(arr, lo, hi):
    pivot = arr[lo]  <- this is arr[3] = 7   
    i = lo           <- i = 3 
    j = hi
    while(True):
        while(arr[i] < pivot): <- arr[3] = 7 so condition fails hence no swap