全局变量在递归函数python中的重新变化 [重复]

问题描述 投票:0回答:1

我试图在Python中使用一个递归函数。即使我可以用一个修饰符改变一个全局值的值,当这个修饰符改变时,它也会重新改变。

下面是代码方案。

array = [1,2,3]
middle_array = []
last_array = []

def recursive_array(in_array):
    global last_array
    global middle_array

    for rank in range(0, len(in_array)):

        if len(in_array) == 0:
            last_array.append(middle_array)
            return last_array
        elif len(in_array) == 1:
            middle_array.append(in_array[0])
            last_array.append(middle_array)
            return last_array

        middle_array.append(in_array[rank])

        bottom = rank -1
        top = rank +2

        if bottom <= 0:
            bottom = 0
        if top >= len(in_array):
            top = len(in_array)

        changable_array = in_array[top:]

        recursive_array(changable_array)

        last_array.append(middle_array)

        middle_array.pop()

    return last_array

第一个 "递归_array "循环从[1,2,3]"in_array "开始。"middle_array "使用正确的append()命令,程序执行正确的 "changeable_array "作为[3]。

递归的第一次调用时,"in_array "为[3],所以进入 "elif len(in_array) == 1: "命令。更新是正确的。现在,middle_array是[1,3],last_array是[1,3],然后返回添加last_array的最后一个append为[[1,3],[1,3]]。

     elif len(in_array) == 1:
        middle_array.append(in_array[0])
        last_array.append(middle_array)

在这之后,命令 "middle_array.pop() "命令就是删除数组的最后一个元素。但是,我的问题是,当middle_array弹出时,"last_array "的值也弹出。

    recursive_array(changable_array)

    last_array.append(middle_array)

    middle_array.pop()

在弹出之前。

last_array = [[1,3],[1,3]]middle_array = [1,3] 。

啪啪啪之后。

last_array = [[1],[1]]middle_array = [1]。

我想弹出middle_array中的值,但保留last_array中的值。你能告诉我路径吗?谢谢你的时间和兴趣。

python arrays recursion global
1个回答
0
投票

我想弹出 middle_array 中的值,但保留 last_array 中的值。

每当你追加middle_array时(我看到的两个地方)就追加一份。

        last_array.append(middle_array.copy())
© www.soinside.com 2019 - 2024. All rights reserved.