变量的作用域(全局变量和局部变量)
变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。变量分为:全局变量、局部变量。
全局变量:
1. 在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块结束。

2.    全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。
3.    全局变量一般做常量使用。
4.    函数内要改变全局变量的值,使用 global 声明一下

局部变量:

1.    在函数体中(包含形式参数)声明的变量。
2.    局部变量的引用比全局变量快,优先考虑使用。
3.    如果局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量

传递不可变对象的引用
传递参数是不可变对象(例如:int、float、字符串、元组、布尔值),实际传递的还是对象的引用。在”赋值操作”时,由于不可变对象无法修改,系统会新创建一个对象。
【操作】参数传递:传递不可变对象的引用

浅拷贝和深拷贝
为了更深入的去了解参数传递的底层原理,我们需要讲解一下“浅拷贝和深拷贝”。我们可以使用内置函数:copy(浅拷贝)、deepcopy(深拷贝)。
浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用。
深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象

位置参数
函数调用时,实参默认按位置顺序传递,需要个数和形参匹配。按位置传递的参数,称为: “位置参数”。

1.    *param(一个星号),将多个参数收集到一个“元组”对象中。
2.    **param(两个星号),将多个参数收集到一个“字典”对象中。