2012-12-27 107 views
1

我有點新來python,無法弄清楚爲什麼我的變量GTRed被覆蓋在指定的地方。就我的理解而言,GTRed在這一點上應該保持不變。 我知道我可以通過使用'for x,y in xygrid:'來減少嵌套for循環的次數,但是這不應該影響這個。爲什麼我的變量在嵌套for循環python中被覆蓋?

非常感謝您的幫助。

親切的問候

GTN = 0 
GTRed = [[0 for j in range(5)] for i in range(4)] 
GTYH = [[0 for j in range(5)] for i in range(4)] 
for jred in range(4): 
    for ired in range(3): 
     GTRed = [[0 for j in range(5)] for i in range(4)] 
     GTRed[ired][jred]=11 
     GTRed[ired+1][jred]=1 
     GTRed[ired][jred+1]=1 
     GTRed[ired+1][jred+1]=1 
     for jyh in range(4): 
      for iyh in range(2): 
       GTYH = GTRed 
       if GTYH[iyh][jyh]==0 and GTYH[iyh+1][jyh]==0: 
        print GTRed 
        GTYH[iyh][jyh]=22 
             # The above line seems to somehow affect GTRed 
        print GTRed 
        GTYH[iyh+1][jyh]=2 
        GameTable[GTN] = GTYH 
        GTN = GTN + 1 

回答

3

的問題是在該行

GTYH = GTRed 

這兩個變量指向列表相同的列表。

a = [0,1,2] 
b = a 
b[1] = 100 
print a # prints [0, 100, 2] 

中的溶液(用於列表的列表)將是

GTYH = [x[:] for x in GTRed] 

import copy 

GTYH = copy.deepcopy(GTRed) 
-1

與上述海報說,行 GTYH = GTRed

告訴GTYH訪問GTRed提到的相同列表

土特產品可以嘗試 GTYH = GTRed [:]

這將創建列表

+1

的新實例'GTRed'是列表的列表。簡單的'GTRed'會創建一箇舊列表的新列表。 – eumiro

+0

我的壞..應該已經正確地讀取了代碼 –