2013-12-18 62 views
-1

我想定義一個函數在Python 2蟒蛇:功能更改列表

lis=[[1,2],[3,4,5]] 

def zu(l): 
    import copy 
    lcop=copy.deepcopy(l) 
    while True: 
     for i in range(len(lcop)): 
      lcop=copy.deepcopy(l) 
      for k in range(len(l[i])): 
      lcop[i].pop() 
    l=copy.deepcopy(lcop) 
     break 
    print l 
    return l 


zu(lis) 
print lis 

更改列表,但在執行上面的代碼只是產生:

[[1, 2], []] 
[[1, 2], [3, 4, 5]] 

所以原始列表在功能內部僅局部改變。但我想把它改回來。是的,我是python的新手。

+1

'LIS =祖(LIS)' –

+0

爲什麼所有的副本? – user2357112

+0

它們在我創建的實際功能中是必需的。這只是一個簡化版本來說明我的問題。 – user3103314

回答

2

您需要分配返回列表,您的變量:

lis = zu(lis) 

你必須非常小心突變在功能原始列表(通過複製列表和變異副本),因此,需要轉讓。或者,修改您的功能,使其確實變異參數列表。

0
lis=[[1,2],[3,4,5]] 

def zu(l): 
    import copy 
    lcop=copy.deepcopy(l) 
    while True: 
     for i in range(len(lcop)): 
      lcop=copy.deepcopy(l) 
      for k in range(len(l[i])): 
      lcop[i].pop() 
    l=copy.deepcopy(lcop) 
     break 
    print l 
    return l 


lis = zu(lis) # Here is the changes 
print lis 

但名單是在Python可變的,所以如果你想修改原來的列表,只需訪問該函數內部列表,不作它的一個副本,然後它會改變你的外部原始列表了。

例如

lis=[1,2,3] 
print lst # print [1,2,3] 
def zu(l): 
    l[0] = [5] 
zu(lis) 
print lis # print [5,2,3]