2013-11-24 238 views
1

這是一個非常簡單的問題,但我不知道爲什麼python會這樣做。對於下面的循環,if head != None...正在創建一個局部變量,以便head += 1不會修改for head in myHeap.array中的頭部。在head + = 1之後添加一個打印(head)產生我想要的結果,但if語句之外的頭部保持不變。for循環中的Python變量範圍

for head in myHeap.array: 
     if head != None and count % int(grow) == 0: 
      head += 1 

所以輸入myHeap.array = [2,2,2,1]在迭代中,當[3,3,3,2]預計的端輸出相同的列表。我也已經驗證了滿足條件的if語句和解釋器使用head += 1

回答

5

您需要訪問myHeap.array列表中的元素進行修改。事情是這樣的:

class myHeap(object): 
    pass 

myHeap.array = [2, 2, 2, 1] 

for n, head in enumerate(myHeap.array): 
    if head != None: 
     myHeap.array[n] = head + 1 

print myHeap.array 

輸出:

[3, 3, 3, 2] 
1

運行這一點,並在生成的ID密切關注。

listt = [2, 3] 

for i in listt: 
    print(id(i)) 
    i += 1 
    print(id(i)) 
    print() 

print(listt) 
print() 

for i in range(len(listt)): 
    print(id(listt[i])) 
    listt[i] += 1 
    print(id(listt[i])) 
    print() 

print(listt) 

什麼是你的代碼發生的事情是臨時變量對象引用的更新,使其不再包含在列表中的對象的引用。因此,您看不到列表中的更改。您需要更新列表元素中的引用。爲此,您需要直接訪問這些變量,即通過下標。