python中的简单列表递归

python中的简单列表递归,python,recursion,Python,Recursion,我正试图了解递归的概念,并对以下代码的输出提出以下疑问: def subsetsofSet(input_list, set_list=None): print "IN input_list: {0}".format(input_list) if not input_list: return input_list.pop() subsetsofSet(input_list) print "RETURN input_list: {0}".f

我正试图了解递归的概念,并对以下代码的输出提出以下疑问:

def subsetsofSet(input_list, set_list=None):
    print "IN input_list: {0}".format(input_list)
    if not input_list:
        return

    input_list.pop()

    subsetsofSet(input_list)
    print "RETURN input_list: {0}".format(input_list)

subsetsofSet([1,2,3])
输出如下:

IN input_list: [1, 2, 3]
IN input_list: [1, 2]
IN input_list: [1]
IN input_list: []
RETURN input_list: []
RETURN input_list: []
RETURN input_list: []

为什么返回输入列表总是空的?它不应该以与输入列表中的
相反的方式显示吗?感谢您对理解这一点的帮助

列表是一个可变元素,因此您只传递对原始列表的引用,每次调用时都会弹出该引用。如果打印列表的id,则可以看到相同的值

因此,即使在第二次调用
subsetsofSet(input\u list)
之前,该列表在返回后是
[1,2]
,它也是空的

如果不希望通过递归调用更改列表,则应传递列表的副本:

def subsetsofSet(input_list, set_list=None):
    print "IN input_list: {0}".format(input_list)
    if not input_list:
        return

    input_list.pop()

    subsetsofSet(input_list[:])
    print "RETURN input_list: {0}".format(input_list)

subsetsofSet([1,2,3])
然后输出为:

IN input_list: [1, 2, 3]
IN input_list: [1, 2]
IN input_list: [1]
IN input_list: []
RETURN input_list: []
RETURN input_list: [1]
RETURN input_list: [1, 2]

您需要
返回子集集合(输入列表)
您可以添加预期的输出吗?缩进是否正确?我希望输入列表中的输出如下:[1,2,3]输入列表中:[1,2]输入列表中:[1]输入列表中:[1]返回输入列表:[1]返回输入列表:[1,2]RETURN input_list:[1,2,3]@thefourtheye,如果他们在任何地方实际使用函数的返回值,则为true;看起来不是这样。@OP
RETURN input_list
始终为空,因为您在任何函数调用结束之前递归地弹出列表中的所有元素。