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

如何通过函数修改字典x值且不修改原参数(已用copy未生效)

问题解决:字典修改后未生效的调整方案

你的代码问题很明确:change_x函数里复制原字典并修改了x的值,但没有把修改后的新字典返回给调用方,所以main里的table变量始终指向原来的字典,自然输出还是初始值8。

按照你「不修改原参数」的要求,给你两种可行的调整方式:

方案一:让函数返回新字典(推荐)

修改函数,新增返回语句,在调用时将返回的新字典赋值给原变量。这样原字典不会被改动,同时你能拿到修改后的结果:

def change_x(table):
    new_table = table.copy()
    new_table['x'] = 10
    return new_table  # 返回修改后的新字典

def main():
    table = {
        'x': 8,
        'y': 10
    }
    print(table['x'])  # 输出8
    table = change_x(table)  # 将新字典赋值给table变量
    print(table['x'])  # 输出10,符合预期

方案二:直接修改原字典(不推荐,违背需求)

如果去掉copy()直接修改传入的字典,虽然能让main里的table值改变,但这会直接修改原参数,不符合你「不修改原参数」的要求,所以仅作补充说明:

def change_x(table):
    table['x'] = 10  # 直接修改原字典

def main():
    table = {
        'x': 8,
        'y': 10
    }
    print(table['x'])  # 输出8
    change_x(table)
    print(table['x'])  # 输出10,但原参数已被修改

原理说明

字典的copy()方法会创建一个全新的字典对象,函数里的new_table是这个新对象的引用,修改它不会影响原table。只有把这个新对象返回并赋值给原变量,才能让main里的table指向修改后的字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:40:31