如何完全重新分配一个字典,该字典是Python中函数的形式参数中的默认可变值

问题描述 投票:0回答:1
def myfunc(l=[]):
    if not l:
        l[:] = otherlist

前面的代码片段完全将列表

l
重新分配给存储在变量
otherlist
中的任何列表,并在
myfunc
的函数调用中维护该值。

def myfunc(d={}):
    
    d.clear()
    for k, v in otherd.items():
        d[k] = v

对于此示例,假设字典

otherd
在函数调用的范围内,只是没有明确提供。

有没有一种方法可以比提供的示例中直接重新分配更简单的方式完全重新分配字典

d

注:

默认可变值是在第一次调用函数时初始化并存储的值。当变异时,它会在函数调用之间维持该状态,因此当访问时,它将返回其最新状态而不是初始状态。

python dictionary default-value
1个回答
0
投票
def myfunc(d={}):
    d.clear()
    d.update(otherd)

应该可以解决问题。也就是说,可变的默认参数值通常不是一个好主意。您可能知道这一点,并且这是故意的。如果没有,替代方案可能是

import copy


def myfunc(d=None):
    d = d or copy.copy(otherd)  # or copy.deepcopy, if you will.
© www.soinside.com 2019 - 2024. All rights reserved.