python简单问题

a = [{'a': 1, 'b': 2}, {'a': 2, 'b': 3}]
kl = {'a': 0, 'b': 0}


def my_add(dataListDict, keylist):
    for x in dataListDict:
        for y in keylist:
            keylist[y] += x[y]
    return keylist


print(my_add(a, kl))

print(my_add(a, kl))

为什么结果是:

{'a': 3, 'b': 5}
{'a': 6, 'b': 10}

而不是:

{'a': 3, 'b': 5}
{'a': 3, 'b': 5}

 

原因已经有同学讲清楚了。要想多次调用结果保持不变,请使用deepcopy

>>> import copy
>>> a = [{'a': 1, 'b': 2}, {'a': 2, 'b': 3}]
>>> kl = {'a': 0, 'b': 0}
>>> def my_add(dataListDict, keylist):

    for x in dataListDict:

        for y in keylist:

            keylist[y] += x[y]

    return keylist

>>> print(my_add(copy.deepcopy(a), copy.deepcopy(kl)))
{'a': 3, 'b': 5}
>>> print(my_add(copy.deepcopy(a), copy.deepcopy(kl)))
{'a': 3, 'b': 5}

怎么样才能得到


```python
{'a': 3, 'b': 5}
{'a': 3, 'b': 5}

```

print(my_add(a, kl))
print(kl) # 把kl打印出来你就知道了,函数参数为字典或列表,调用函数之后是在同一个变量(而非局部变量)
print(my_add(a, kl))

你函数运行依次后,变量值已经变化了啊。所以你再运行一遍,就是叠加变化