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

Python全局变量本地使用:如何在函数内用副本不修改全局

解决方法:使用列表副本避免修改全局变量

问题的核心在于:列表是可变对象,当你将其作为参数传入函数时,传递的是对象的引用而非副本。因此在change_thing中对parameter的修改会直接作用于原全局列表things,而字典中存储的也是这个列表的引用,所以字典内容也会跟着变化。

要实现仅在函数内使用本地副本而不修改全局变量,你需要在函数内创建列表的副本。常见的创建列表副本的方式有三种:

  • 使用切片语法:new_list = parameter[:]
  • 使用list()构造函数:new_list = list(parameter)
  • 使用copy模块的copy()方法:import copy; new_list = copy.copy(parameter)

修改后的代码示例

things = ['a', 'b']
dictionary = {}

def save_thing(parameter):
    dictionary['First thing'] = parameter
    print('Dictionary BEFORE change_thing is run', dictionary)

def change_thing(parameter):
    # 创建列表的本地副本
    local_things = parameter[:]
    local_things.remove('a')
    # 这里操作local_things不会影响原列表
    print('Local copy inside change_thing:', local_things)

save_thing(things)
change_thing(things)
print('Dictionary AFTER change_thing is run', dictionary)

预期输出

Dictionary BEFORE change_thing is run {'First thing': ['a', 'b']}
Local copy inside change_thing: ['b']
Dictionary AFTER change_thing is run {'First thing': ['a', 'b']}

额外建议:确保字典始终保留初始状态

如果担心后续其他操作修改全局things会影响字典内容,可以在save_thing函数中也存入列表的副本:

def save_thing(parameter):
    # 存入副本而非原列表的引用
    dictionary['First thing'] = parameter[:]
    print('Dictionary BEFORE change_thing is run', dictionary)

这样即使全局things被修改,字典中的内容也会保持初始的['a', 'b']。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:02:13