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

Python中同为全局变量的int类型与list类型为何表现不一致?

核心原因是Python的作用域规则 + 可变/不可变对象的操作差异

  • 首先明确Python对全局变量的访问规则:如果函数内部尝试对变量做赋值类操作(包括=、+=、-=等重新绑定变量指向的操作),Python会默认将该变量识别为局部变量,不会自动去全局作用域查找。
  • 第一种情况中的x是整数类型,属于不可变对象:
    x += n本质等价于x = x + n,属于赋值操作,Python会把这里的x判定为局部变量。但赋值语句右侧需要先读取x的值,此时局部x还未完成定义,因此抛出local variable 'x' referenced before assignment错误。
    如果要操作全局的x,需要在函数开头加global x声明,明确告知Python该变量使用全局作用域的定义即可正常运行。
  • 第二种情况中的fi是列表类型,属于可变对象:
    整个函数内部没有对fi本身做赋值操作,只是调用fi.append()方法修改列表内部的元素,属于对可变对象的原地修改,没有改变fi变量本身的指向。因此Python找不到局部定义的fi时,会自动到全局作用域查找已定义的fi列表,因此可以正常运行。
    如果在函数中尝试对fi本身赋值(比如写fi = [1,2,3]),同样会触发和第一种情况一样的报错,此时如果要修改全局的fi变量也需要加global fi声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:15:03