1

我对 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
4

2 回答 2

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)
于 2012-12-27T12:48:52.450 回答
-1

正如上面的海报所说,这条线 GTYH = GTRed

告诉 GTYH 访问与 GTRed 引用的相同列表

你可以试试 GTYH = GTRed[:]

这将创建列表的新实例

于 2012-12-27T12:52:07.843 回答