2016-02-23 20 views
1

我有一個代碼不輸出結果,因爲我想要的。如何防止列表在被用作函數中的參數後更改?

代碼

def func_a(list1): 
    list1.insert(2,'3') 
    list1.append('c') 
    return (list1) 

def main(): 
    list_1 = ['1','2','a','b']  
    list_2 = func_a(list_1) 
    print (list_1) 
    print ("\n") 
    print (list_2) 

main() 

輸出到這個代碼是:

['1', '2', '3', 'a', 'b', 'c'] 


['1', '2', '3', 'a', 'b', 'c'] 

我希望它是:

['1', '2', 'a', 'b'] 


['1', '2', '3', 'a', 'b', 'c'] 

回答

4

你必須創建列表的副本,並修改:

def func_a(list1): 
    list1copy = list1[:] 
    list1copy.insert(2,'3') 
    list1copy.append('c') 
    return (list1copy) 

您也可以保持func_a相同,只是呼叫它與列表的副本:

list_2 = func_a(list_1[:]) 
+0

感謝您的幫助! – MAY

0

您需要通過列表的副本要達到什麼你想要:

list_2 = func_a(list_1[:]) 

這裏發生的事情是該列表通過引用傳遞給函數,即其內容僅在內存中存在一次。在函數內部,您可以更改此原始列表並將引用返回給它。回到調用的地方,您可以將相同的引用分配給另一個變量名稱,但是,現在只有一個列表已被更改。

+0

感謝您的幫助! – MAY

相關問題