You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Python循环中修改列表会更新循环外的原变量?

问题原因

Python中的列表属于可变对象,你代码中所有通过=直接对列表赋值的操作,都只是给同一块内存地址的列表绑定新的变量名,不会生成独立的列表副本:

  • parentPos = self.pos 没有复制列表,只是让parentPos和self.pos指向同一个列表
  • childPos = parentPos 同样没有复制列表,三个变量共享同一个列表数据
    因此你修改childPos[i]时,本质是直接修改了原始的self.pos列表,导致后续循环的基准值被篡改,最终所有生成的EightQueen对象的pos属性都指向同一个被反复修改的列表,结果不符合预期。
修正代码

每次生成子位置时先对基准列表做浅拷贝,保证每次修改的都是独立的新列表:

def createChildren(self):
    # 先拷贝原始pos作为基准,避免修改原对象属性
    parentPos = self.pos.copy()
    children_list = []
    for i, element in enumerate(parentPos):
        for n in range(8):
            if element == n:
                continue
            # 每次生成子位置都先拷贝基准列表
            childPos = parentPos.copy()
            childPos[i] = n
            children_list.append(EightQueen(childPos))
                        
    return children_list

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:24:06