调用函数时,函数参数仅仅是引用传入对象的名称。
参数传递的基本语义和其他编程语言中已知的方式不完全相同。
例如“按值传递” 或 “按引用传递”。
例如,如果传递不可变的值(如tuple、string list),参数看起来实际是按值传递的。
但如果传递可变变量(如列表或字典)给函数,然后再修改次可变对象,这些改动就会反映在原始对象中。
像这样悄悄修改其输入值或者程序其他部分的函数具有副作用。一般来说,最好避免使用这种编程风格,因为随着程序的规模和复杂度不断增加,
这类函数会成为各种奇怪编程错误的来源。(例如,如果函数具有副作用,只看函数调用是无法明显找到问题的。)
在设计线程和并发性的程序中,使用此类函数的效率很低,因为通常需要使用锁定来防止副作用的影响。
多线程环境中,对于每个run函数如果显示修改一个全局变量(一个字典),那么需要为每个线程加锁。
一般的办法就是直接return新变量,而不是“原地修改”