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

Python中.append()与+=的区别及LeetCode78子集问题引用报错原因

报错核心原因:Python 的变量作用域绑定规则

  • 当你在嵌套函数内仅对外层可变对象调用方法(比如res.append(xxx))时,Python 会识别为你在操作外层作用域的已有变量,不会将其绑定为当前函数的局部变量。
  • += 在 Python 语法层面属于赋值类操作,哪怕列表的+=是原地修改的逻辑,只要在嵌套函数内出现了对变量的赋值类操作,Python 会默认将该变量标记为当前嵌套函数的局部变量。执行到这行代码时,Python 会优先找当前函数的局部变量,发现你在赋值前就引用了该变量,自然抛出UnboundLocalError。

简单复现代码

def outer():
    res = []
    def backtrack():
        # 写法1:正常运行
        # res.append([1,2])
        # 写法2:直接报错,res被识别为backtrack的局部变量,未赋值就引用
        res += [[1,2]]
    backtrack()
    return res

outer()

解决方案

如果要保留+=的写法,只需要在回溯函数的第一行加nonlocal res声明,手动告知 Python 该变量不属于当前函数的局部作用域,去外层函数查找即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 09:09:03