为什么我的变量在python的嵌套for循环中被覆盖?

时间:2012-12-27 12:47:32

标签: python variables loops

我对python有点新意,无法弄清楚为什么我的变量GTRed会被指示覆盖。据我所知,GTRed应该保持不变。 我知道我可以通过使用'for x,y in xygrid:'之类的东西来减少嵌套for循环的数量,但这不应该影响这个。

非常感谢您的帮助。

亲切的问候

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

2 个答案:

答案 0 :(得分: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 :(得分:-1)

如上面的海报所说,行     GTYH = GTRed

告诉GTYH访问与GTRed

所引用的相同的列表 可以试试     GTYH = GTRed [:]

这将创建列表的新实例