Python 为什么每次结果都会改变?

Python 为什么每次结果都会改变?,python,Python,如果省略第3、4个参数,每次结果都会累加 但是如果我不省略任何参数,那也没关系 任何人都可以解释为什么会发生这种情况,这是python错误吗 更新 这似乎并不总是发生: def sum_specified_dims(mdd, dims, keys = [], result = {}): for key,value in mdd.items(): keys.append(key) if type(value) == dict: sum

如果省略第3、4个参数,每次结果都会累加

但是如果我不省略任何参数,那也没关系

任何人都可以解释为什么会发生这种情况,这是python错误吗

更新

这似乎并不总是发生:

def sum_specified_dims(mdd, dims, keys = [], result = {}):
    for key,value in mdd.items():
        keys.append(key)
        if type(value) == dict:
            sum_specified_dims(value, dims, keys, result)
        else:
            pointer = result
            for dim in dims:
                index = dim - 1
                key_value = keys[index]
                if not key_value in pointer:
                    pointer[key_value] = {}
                pointer = pointer[key_value]
            if key_of_sum in pointer:
                pointer[key_of_sum] += value
            else:
                pointer[key_of_sum] = value
        keys.pop()
    return result

key_of_sum='total'
keys=[1]
import datetime
mdd={datetime.date(2013, 7, 16): {3.0: {'2.0': 8}}}
>>> sum_specified_dims(mdd,keys)
{datetime.date(2013, 7, 16): {'total': 8}}
>>> sum_specified_dims(mdd,keys)
{datetime.date(2013, 7, 16): {'total': 16}}
>>> sum_specified_dims(mdd,keys,[],{})
{datetime.date(2013, 7, 16): {'total': 8}}

原因是python中的可变(例如列表)默认参数“记住”了它们以前的值


有关有趣的解释,请参阅。

原因是python中的可变(例如列表)默认参数“记住”了它们以前的值


有关有趣的解释,请参阅。

@Blender,我提供了一个不发生的示例。整数是不可变的,而列表和字典是可变的。链接问题中已经解释过了。@user2559257:您没有,在这种情况下,您没有改变默认参数。请尽量避免将“keys=[],result={}”作为可变参数。查看此链接->@Blender,我提供了一个不发生的示例。整数是不可变的,而列表和字典是可变的。链接问题中已经解释过了。@user2559257:您没有,在这种情况下,您没有改变默认参数。请尽量避免将“keys=[],result={}”作为可变参数。请参阅此链接->
>>> def f(a=2):
...     print a
... 
>>> f(3)
3
>>> f()
2