如何通过函数修改字典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
相关产品推荐
相关产品推荐

