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

Python中修改外部列表为何无需声明global?

为什么未声明global也能修改外部列表?

先看你的代码:

my_list = [{"id": 1, "data": "Python"},
           {"id": 2, "data": "Code"},
           {"id": 3, "data": "Learn"}]


def this():
    for index in range(len(my_list)):
        if my_list[index]["id"] == 2:
            del my_list[index]
            break
this()
print(my_list)

>>> [{'id': 1, 'data': 'Python'}, {'id': 3, 'data': 'Learn'}]

核心原因是Python对可变对象和变量绑定的规则:

  • 列表属于可变对象,你在函数里执行del my_list[index],本质是原地修改这个列表对象的内容,并没有改变my_list变量本身指向的内存地址。
  • global关键字的作用是告诉Python:我要在函数内部修改变量的绑定关系(比如给my_list重新赋值一个新列表my_list = [1,2,3]),这种场景才需要声明global。
  • 对于可变对象的原地操作(比如删除元素、追加元素、修改字典值),不需要global,因为函数只是直接操作变量指向的那个对象,没有改变变量本身的绑定关系。

举个反例:如果在函数里写my_list = [1,2,3],没有global的话,Python会把它当成局部变量,不会修改全局的my_list,这时候才需要加global声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:27:16