2012-11-03 55 views
2

我驚訝於我爲python寫的這個函數。我注意到,在較低的while中,即使該列表未被沿着該函數觸摸,它也會更改列表vctor中的值。我已通過(10, [1,3,5,7,10]),並將名單vctor更改爲[1,3,5,8,10]。有沒有對此的解釋?一個函數,無故更改列表的值

def siguiente(k,vctor): 
    l = len(vctor) 
    vctorsig = vctor 
    i = l-1 
    while i>= 0:  
     if vctorsig[i] <= k - l + i: 
      j=i 
      while j<=l-1: 
       print vctor 
       vctorsig[j] = vctor[i]+j-i+1 
       j=j+1 
      i = -1 
     else: 
      i = i-1 
    return vctorsig  
+0

你壓痕是不正確 –

+0

什麼是在外'while'循環的'else'條款的目的是什麼?在那之後你再也不會用'i'做任何事情。 – mgilson

+0

我不知道它爲什麼會這樣顯示。在源文本中(點擊編輯)它有更好的縮進。 – user17786

回答

6

當你做vctorsig = vctor,你正在vctorsigvctor引用的列表的引用,所以當你修改,修改原來的列表中。

如果你想複製列表,你可以簡單地做vctorsig = list(vctor)

3

這一點很難說,因爲你的縮進是有趣的,但我認爲該行:

vctorsig = vctor 

是你的問題。在此行中,您將創建一個新的參考到同一個列表。換句話說,如果你改變vctorsig(在這一行vctorsig[j] = vctor[i]+j-i+1),你也改變vctor,因爲它們是相同的列表。討巧的,這是做一個副本:

vctorsig = vctor[:]