机算机三大部件
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
导入模块
全局变量
函数定义
执行的代码