变量的进阶

机算机三大部件

CPU,内存,硬盘

变量与值的关系

值,理解为实体的数据

变量,理解为数据的称呼

每一个值被创造出来,都会有一个内存id号码。类似于人的身份证号码。

赋值操作
变量 = 值
a = “hello”
本质是

让一个变量名称指向数值的内存地址

我们后面使用变量时,对应内存地址的数据就会被使用
函数传参的本质
函数调用时,实参给形参传值

实际上,本质传的就是数据的引用(数据的内存id地址)

数据根据是否变化分两类

可变类型

列表

字典

不可变类型

数字类型

字符串

元组

不可变类型

不可变类型

首次出现不可变类型的数据时

会先在内存中划出一块空间,存入不可变类型的数据实体,并且得到了一个内存的id

然后变量获得这个内存id

第二次赋值相同的值的时候,系统会发现内存中已经存在这个数据了。

由于该数据是不可变类型,特点就是,数据如果存在,不再创建新的内存空间。

如果第二次要用的话,直接使用这个数据的内存地址。

m = 12

n = 12

这两个赋值操作的过程

可变数据类型

总结两类型的赋值

不可变类型

a = 1

b = 1

的过程

首次出现不可变类型1的时候,会在内存中划出一块空间,保存数据1

然后1同时会获得一个内存id

变量a作为一个标记,标签,会指向1的内存地真正

我们把这种指向叫做引用

第二次b=1

第二次出现数据的1的时候,会在内存中查看,是否有它的存在,如果没有这个数据1的存在,那么会创建。

如果数据1存在了,那么直接使用这个数据1的内存地址

同时变量b会指向数据1的内存地址

总的看来,变量a 与变量b 他们的数据内存地址是一致

可变类型不同的地方就是

不论数据是否是首次出现

只要存在数据的使用,都会是一个创建的过程,都会在内存中划出一块区域

可变类型的特点

通过自已的方法,修改数据(增删改查),自己的内存地址,不变

不可变类型不行

问题待解决

变量名 实际的数据

称呼, 内存地址对应的那个数据

同桌,只是一个标签

m > id1, 指向的是id1的数据,访问m,拿到的就是id1的数据

m > id2,指向的是id2的数据,访问m, 拿到的就id2 的数据

哈希

hash(不可变类型)

数字,字符串,元组

变量的作用域

指的是变量的有效区域

局部变量

在函数中定义,在函数中使用

函数结束,局部变量销亡

全局变量

在函数外,在主代码区定义的变量

全局变量可以在函数中被使用

特别的情况

如果在函数内定义了一个与全局变量同名的变量

如果全局变量有num = 1

然后我们在函数内也定义了一个num=3的时候

再打印num 我们就是直接使用自己范围内的,函数内的num

在函数内修改全局变量

使用关键词global

函数内部通过global关键词,可以把全局变量引入进来

引入进来后,对它进行赋值操作,就不再是生成局部变量了

而是

修改全局变量的值

global 全局变量名  # 引入全局变量到函数内部
全局变量名 = 数值   # 修改全局变量

小结

明确下面的过程到底经历了哪些步骤

变量1 = 值1
变量2 = 值1

哪些数据类型是可变类型

  • 列表
  • 字典

特点,他们自身有技能(改变自己的技能,增删改查)

函数的传参

  • 本质就是传送数据的引用

哪些类据类型是不可变类型

  • 数字型
  • 字符串
  • 元组

特点,他们自身没有修改自己的技能

可变类型的特点

  • 被定义时,不论是否有相同的数据,直接在内存中划块空间存值

  • 可以在不改变内存地址的情况下,改变自身内部的数据内容

  • 只有通过自己的技能(方法)才可以做到不改变内存地址改变数据的实现

不可变类型的特点

  • 被定义时,先查看内存中是否有相同的数据存在,如果有就直接使用,如果没有就划一块内存存数据
  • 无法在内存地址不变的情况下修改数据

哈希

  • 哈希函数 hash(不可变类型)
  • 同样的数据生成同样的哈希值
  • 不同的数据生成不同的数据值
  • 指纹的用途,用于识别两个数据是否一致

局部变量

定义在函数内部的变量

进入函数后才存活,函数结束就销亡

全局变量

定义在函数外部的变量

可以被函数使用

函数内部要修改全局变量,可通过global关键词先导入进来,然后通过赋值语句来修改

局部变量的命名

以g_ 或者 gl_开头

写代码的堆放位置

shebang

导入模块

全局变量

函数定义

执行的代码

猜你喜欢

转载自blog.csdn.net/lyq562551775/article/details/88782346