递归函数/python中的全局变量重新更改



我正在尝试在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

第一个"recursive_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为 [[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中。你能给我指路吗? 感谢您抽出时间和您的兴趣。

我想在

middle_array中弹出值,但将值保留在last_array

每当您附加middle_array(我可以看到的两个地方(时,都会附加一个副本:

last_array.append(middle_array.copy())

最新更新