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
相关产品推荐
相关产品推荐

