返回列表时函数中的奇怪行为

时间:2012-06-26 22:46:06

标签: python

我在网上找到了一个生成集合中所有子多重集的函数,然后返回它们。但是当我走过代码来理解它实际上做了什么时,我真的陷入困境。

以下是代码:

def build_substrings(string):
    """ Returns all subsets that can be formed with letters in string. """
    result = []
    if len(string) == 1:
        result.append(string)
    else:
        for substring in build_substrings(string[:-1]):
            result.append(substring)
            substring = substring + string[-1]
            result.append(substring)
        result.append(string[-1])
    return result

现在,让我说我称之为“ab”。基本情况被忽略,所以我到了else块并再次调用该函数,现在参数为“a”。我到达基础案例并将结果附加“a”。现在我返回结果。 for循环现在被“激活”。 substring被指定为“a”,并将其附加到结果列表中。现在,我在名为'result'的列表中添加了两次“a”。不知何故,在输出中它只显示一次。 非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

  

现在,我已经在名为'result。

的列表中添加了两次“a”

不,result是一个局部变量,第一次向其添加“a”时,它是result的本地build_substrings("a"),而第二次是本地result 1 {} build_substrings("ab")。它们是对您的方法的两种不同调用,因此它们不会共享result