首页 > 解决方案 > 为什么我的循环更新循环外的变量?

问题描述

def createChildren(self):
    parentPos = self.pos
    children_list = []
    for i, element in enumerate(parentPos):
        childPos = parentPos
        for n in range(8):
            if element==n:
                pass
            else:
                childPos[i] = n
                children_list.append(EightQueen(childPos))
                        
    return children_list

self.pos看起来像这样:[0,1,2,3,4,5,6,7,8] 该列表在循环中传递给 childPos,它为更改 childPos 中的值之一分配不同的值。

我的目标是列出 self.pos 的对象列表

[1,1,2,3,4,5,6,7,8]
[2,1,2,3,4,5,6,7,8]
[3,1,2,3,4,5,6,7,8]
...
[0,1,2,3,4,5,6,7,7]
[0,1,2,3,4,5,6,7,8]

一次只更改一个数字

上面的代码返回的对象self.pos

[0, 2, 3, 4, 5, 6, 7, 8]
[2, 2, 3, 4, 5, 6, 7, 8]
[3, 2, 3, 4, 5, 6, 7, 8]
[4, 2, 3, 4, 5, 6, 7, 8]
[5, 2, 3, 4, 5, 6, 7, 8]
[6, 2, 3, 4, 5, 6, 7, 8]
[7, 2, 3, 4, 5, 6, 7, 8]
[7, 0, 3, 4, 5, 6, 7, 8]
[7, 1, 3, 4, 5, 6, 7, 8]
[7, 3, 3, 4, 5, 6, 7, 8]
[7, 4, 3, 4, 5, 6, 7, 8]
[7, 5, 3, 4, 5, 6, 7, 8]
[7, 6, 3, 4, 5, 6, 7, 8]
[7, 7, 3, 4, 5, 6, 7, 8]
...

这意味着parentPos每次循环运行时都会更新。为什么会这样?

标签: python

解决方案


推荐阅读