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

Python类中递归嵌套函数执行后类属性回退到初始值问题求解

问题根因

这不是递归或者类属性作用域的问题,本质是Python可变对象的引用传递特性导致的:

  • 代码里currentPath是列表类型,属于可变对象,你执行self.minPath = currentPath时,并没有复制列表里的内容,只是让self.minPath和currentPath指向了内存里的同一个列表对象
  • 递归到终点赋值完成后,函数还会继续执行后续的回溯逻辑,也就是currentPath.pop()操作,这个操作会修改两个变量指向的同一个列表,等整个递归全部执行完时,currentPath里的元素已经被全部弹出,自然self.minPath也变成空列表
  • 而minPathSum是整数类型(不可变对象),赋值时会直接复制值,不受后续操作影响,所以输出正常

你写的非递归测试代码没有复现问题,是因为你直接给tstArray赋值了新的列表常量,没有后续修改该列表的操作,所以结果符合预期。

修复方案

只需要在给self.minPath赋值时,对currentPath做一次浅拷贝即可,三种写法任选其一:

# 写法1:用copy方法
self.minPath = currentPath.copy()
# 写法2:用list构造
self.minPath = list(currentPath)
# 写法3:用切片
self.minPath = currentPath[:]

修改后完整运行的输出为:

Output: 7
1->3->1->1

如果递归顺序调整也会输出另一条和为7的路径1->1->4->2->1,属于正常情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:51:00