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))
你函数运行依次后,变量值已经变化了啊。所以你再运行一遍,就是叠加变化