2012-11-18 61 views
1
def test(x,theList): 
    theList.append(x) 
    if x < 2: 
     x = x + 1 
     test(x,theList) 
     print x 
     print theList 

test(1,[]) 

为什么结果[1,2]?不仅[1]?它为什么保留在列表中?

+1

我删除了我的答案,因为在重新读取代码时,我不确定你在问什么。该函数不会返回任何内容,并且您传入的列表在返回后不可访问。那么,当你说“结果”时,你是什么意思? –

+0

我不明白他什么时候更深入地改变名单。但是因为我没有退还它,为什么它会打印[1,2]? – BBAA

回答

2

因为您在递归调用test()返回后执行print语句。

Python对象总是按引用传递,所以当第二次调用测试时调用theList.append(x)时,它会追加到传入的原始列表中,这就是您打印的内容。

+0

好的,我明白了,有没有办法让它不编辑原始列表? – BBAA

+0

@BBAA:你可以调用'test(x,theList [:])',它传递一个列表副本而不是原来的。然而,这是冒险的。不知道你正在处理的现实世界的问题,很难想象在什么情况下这样非常低效的代码将是必要的。 –

+0

谢谢Marcelo Cantos,你给我所有我需要的信息继续 – BBAA

0
def test(x,theList): 
    if x < 2: 
     theList.append(x) 
     x = x + 1 
     test(x,theList) 
     print x 
     print theList 

test(1,[]) 
+0

是的,但是这是一个测试,真实情况是不同的。我想知道为什么它改变列表与我一起返回更改列表? – BBAA

+0

@BBAA我不明白你的意思。 – 0x90

相关问题