为什么列表不会附加到我的全局列表中?

时间:2014-01-30 19:57:00

标签: python list recursion append

我编写了以下代码,用于在递归的帮助下生成特定数量元素的所有可能组合:

global_values = []
parameters = [1,2,3,4,5,6]
content = ["x","y","v","sd"]

def rec(values, depth):
    if(depth == 0):
        global_values.append(values)
        print values
        return

    for i in range(0,len(parameters)):
        values.append(parameters[i])
        rec(values,depth-1)
        values.pop()
    return

rec([],len(content))

print "!!!!----------!!!!"
print global_values

“print”值“”语句打印正确的结果,但我想将此结果附加到全局列表。为什么这不起作用?

使用

parameters = [1,2,3]
content = ["x","y"]

我得到了输出:

[1, 1]
[1, 2]
[1, 3]
[2, 1]
[2, 2]
[2, 3]
[3, 1]
[3, 2]
[3, 3]
!!!!----------!!!!
[[], [], [], [], [], [], [], [], []]

但我希望最后一个列表填充之前打印的值。

1 个答案:

答案 0 :(得分:3)

当您将values追加到global_values时,列表values中有数字。但是,您稍后删除这些数字,因此附加到global_values的列表现在为空。出现此问题的原因是,只有一个列表values不断重复使用。

要明白我的意思,请尝试:

list1 = []
list2 = [5,9]
list1.append(list2)
list2.pop() # Because list2 is inside list1, this changes the contents of list1
print list1 # Prints [[5]]

附加values使用global_values.append(values[:])副本