python - 为什么我的循环更新循环外的变量?
问题描述
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
每次循环运行时都会更新。为什么会这样?
解决方案
推荐阅读
- swift - UIViewRepresentable UITextField 在连接到 ObservableObject 的 @Published 属性时会跳过第一个字符
- macos - 这个包不兼容
- flutter - Flutter 中的 AnimatedBuilder
- android - 我正在使用 SmartyAd SDK 并收到错误项目未构建
- matlab - AWGN、Rayleigh 和 Rician 频道上的 BPSK、QPSK Mod
- r - 从每日回报到不适用的每周回报
- python - 在 Python 中接收 UDP 消息
- android - Android 可绘制工具提示箭头框
- swiftui - SwiftUI 检查 URL 是否可达并自动切换到 ContentView
- javascript - 每个会话只运行一次 JS 文件