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

函数内修改传入的Python字典,外部字典未更新问题咨询

为什么修改函数内的字典参数后,外部字典没有变化?

我尝试在函数内部替换传入字典的新值,但调用函数后外部的字典值完全没变化,之前以为这种操作能生效,现在搞不懂哪里错了。

代码示例:

def multiply_by_term(poly, term):

    new_values = []
    for key in poly:
        new_values.append(poly[key] * term[1])
    
    new_key_assign = list(poly.keys())
    for i in range(len(new_key_assign)):
        new_key_assign[i] += term[0]
  
    poly = dict(zip(new_key_assign, new_values))

问题原因

Python的参数传递是传对象引用,但你在函数里执行poly = dict(...)时,是把局部变量poly重新指向了一个全新的字典对象,而非修改原来传入的那个字典。一开始函数内的poly和外部字典指向同一个对象,但赋值操作后,函数内的poly就和外部字典彻底断开关联,所以外部字典不会有任何变化。

解决办法

方法1:原地修改原字典

清空原字典,再把新的键值对更新进去,这样操作的是原对象,外部字典会同步变化:

def multiply_by_term(poly, term):
    new_values = []
    for key in poly:
        new_values.append(poly[key] * term[1])
    
    new_key_assign = list(poly.keys())
    for i in range(len(new_key_assign)):
        new_key_assign[i] += term[0]
  
    # 清空原字典并更新新内容
    poly.clear()
    poly.update(dict(zip(new_key_assign, new_values)))

方法2:返回新字典(推荐)

让函数生成并返回新字典,外部通过重新赋值接收结果,这种方式没有副作用,代码逻辑更清晰:

def multiply_by_term(poly, term):
    new_values = []
    for key in poly:
        new_values.append(poly[key] * term[1])
    
    new_key_assign = list(poly.keys())
    for i in range(len(new_key_assign)):
        new_key_assign[i] += term[0]
  
    return dict(zip(new_key_assign, new_values))

# 调用示例
poly = multiply_by_term(poly, term)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:20:34