Python 变量是在每次返回后重新分配还是仅在递归完成时重新分配

Python 变量是在每次返回后重新分配还是仅在递归完成时重新分配,python,bubble-sort,Python,Bubble Sort,在这个冒泡排序算法中,当调用sort\u array()方法时,当排序完成时,程序继续在返回数组行执行,该行被执行n次,其中n是递归的深度,取决于输入。 我没有经常使用递归,所以我想知道变量排序列表是被重新分配n次(对于新列表3次)还是在递归结束时只被重新分配一次 class Bubble: def __init__(self): self.swap_counter = 0 def sort_array(self, array): for i,

在这个冒泡排序算法中,当调用
sort\u array()
方法时,当排序完成时,程序继续在
返回数组
行执行,该行被执行
n次
,其中
n
是递归的深度,取决于输入。 我没有经常使用递归,所以我想知道变量
排序列表
是被重新分配
n次
(对于
新列表
3次)还是在递归结束时只被重新分配一次

class Bubble:

    def __init__(self):
        self.swap_counter = 0

    def sort_array(self, array):
        for i, element in enumerate(array):
            if i < array.index(array[-1]):
                if element > array[i+1]:
                    temp_element = array[i+1]
                    array[i+1] = element
                    array[i] = temp_element
                    self.swap_counter += 1
        if self.swap_counter > 0:
            self.swap_counter = 0
            self.sort_array(array)

        return array


if __name__ == "__main__":
    new_list = [5, 1, 4, 2, 8]
    bubble = Bubble()
    sorted_list = bubble.sort_array(new_list)
类气泡:
定义初始化(自):
self.swap_计数器=0
def sort_阵列(自身,阵列):
对于i,枚举(数组)中的元素:
如果i数组[i+1]:
temp_元素=数组[i+1]
数组[i+1]=元素
数组[i]=临时元素
self.swap_计数器+=1
如果self.swap_计数器>0:
self.swap_计数器=0
self.sort_数组(数组)
返回数组
如果名称=“\uuuuu main\uuuuuuuu”:
新列表=[5,1,4,2,8]
气泡=气泡()
排序列表=气泡。排序数组(新列表)

它只被赋值一次。数组(列表)正在发生变异,因此将其作为值返回有点不真实。。这也确实混淆了这个问题。无论如何,每个递归调用都有它自己的作用域和独立的局部变量,即使它们可以引用(并因此被用来改变)相同的对象。同样,每个递归调用只能退出一次。谢谢您的解释。我了解到一个lotIt只能被赋值一次。数组(list)正在发生变异,所以将其作为值返回有点不真实。。这也确实混淆了这个问题。无论如何,每个递归调用都有它自己的作用域和独立的局部变量,即使它们可以引用(并因此被用来改变)相同的对象。同样,每个递归调用只能退出一次。谢谢您的解释。我学到了很多