目标:

  • 变量的引用
  • 可变与不可变类型
  • 局部变量和全局变量

01 变量的引用
在python 中,变量和数据是分开存储的,数据保存在内存中的一个位置,变量中保存着数据在内存中的地址。变量中 记录数据的地址(本质上就是一个数字),就叫做引用。使用id()函数可以查看变量中保存数据所在的内存地址。
注意:

  1. 如果变量已经定义,当给一个变量赋值时,本质上是修改了数据的 引用。变量不再对之前的数据引用,改为对新赋值的数据引用。
  2. 在python 中,函数的实参和返回值都是靠 引用来传递

02 可变和不可变类型
不可变类型:内存中的数据不允许被修改

  • 数字类型 int ,bool ,float ,complex ,
  • 字符串 str
  • 元组 tuple

可变类型:内存中的数据可以被修改

  • 列表 list
  • 字典 dict

用 变量名.方法 可以修改保存的数据而不修改引用,但是用赋值语句是修改的 引用

补充:

  • python 中内置有一个名字叫做 hash()的函数,此函数接收一个 不可变类型 的数据作为 参数,返回结果是一个整数。
  • 哈希 是一种算法,其作用就是提取数据的 特征码(指纹),即:
    相同的内容得到相同的结果,不同的内容的得到不同的结果
  • 在python 中设置字典的键值对时,首先会对key 进行 hash 以决定如何在内存中保存字典的数据,以方便后续 对字典的操作,进行 增、删、改、查。因此,键值对的key必须是不可变数据类型,而value 可以是任意数据类型

03 局部变量和全局变量

  • 局部变量 是在函数内部 定义的变量,只能在函数内部使用
    局部变量在 函数执行时 才会被创建
    函数执行结束后,函数内部的局部变量,会被系统收回。
    局部变量在生命周期内,可以用来存储 函数内部临时使用到的数据

不同的函数,可以定义相同名字的局部变量,但是各用各的,相互之间不会产生影响

  • 全局变量 是在函数外部定义的变量,所有函数 内部 都可以使用这个变量
    在python 中,是不允许直接修改全局变量的值,如果在函数内部使用赋值语句,则其实是会在函数内部定义一个局部变量。
    注意:在其他开发语言中,大多不推荐使用全局变量——可变范围太大,导致程序不好维护。但是python 中由于不能 在函数内部直接修改全局变量的引用,因此还比较常用。如果我们希望在函数内部修改全局变量,使用 global 声明一下变量即可。global 关键字会告诉解释器后面的变量是一个全局变量,在使用赋值语句时,就不会创建局部变量。

注意:在开发时,应该把模块中的所有全局变量定义在所有函数上方,就可以保证所有的函数都能够正常的访问到每一个全局变量了。

代码结构示意图:
图片说明