2012-11-18 95 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

相關問題