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

Python循环使用同名变量报错原因:迭代后变量值变更问题

为什么迭代变量和列表同名会导致后续报错?

这是个很典型的Python变量作用域问题,咱们把整个过程拆解开就能明白原因了:

首次执行代码的过程

假设你在REPL里输入的是这行逻辑(用分号分隔两行代码):

a = [1, 2, 3]; for a in a: print(a)

执行顺序是这样的:

  1. 先完成赋值:a = [1,2,3],此时变量a指向的是列表[1,2,3]。
  2. 进入for循环,这里的迭代变量也是a——Python里for循环的迭代变量会直接覆盖当前作用域里的同名变量:
    • 第一次循环:把列表的第一个元素1赋值给a,打印1;
    • 第二次循环:把列表的第二个元素2赋值给a,打印2;
    • 第三次循环:把列表的第三个元素3赋值给a,打印3;
  3. 循环结束后,迭代变量a并不会被销毁,它会保留最后一次赋值的结果——也就是整数3。这时候原来的列表对象已经没有变量指向它了(会被Python的垃圾回收机制处理),而a现在是个整数。

再次执行循环时报错的原因

当你再次执行for a in a: print(a)时,此时a的值是整数3。而for循环要求后面的对象必须是可迭代类型(比如列表、元组、字符串等),整数显然不是可迭代对象,所以就抛出了TypeError: 'int' object is not iterable的错误。

用其他迭代变量(比如i)正常的原因

如果改成:

a = [1,2,3]; for i in a: print(i)

循环结束后,迭代变量i会变成3,但原来的列表变量a并没有被覆盖,依然指向[1,2,3]。所以下次再执行for i in a: print(i)时,迭代的还是原来的列表,自然能正常运行。

简单来说:Python的for循环迭代变量会在当前作用域中保留最后一次的值,如果你不小心用了和迭代对象同名的变量,循环结束后这个变量就会被覆盖成迭代的最后一个元素,后续再用它作为迭代对象就会出错啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:04:55