1. 引用
1.1 引用的概念
- 引用是一种变量指向数据存储空间的现象
- 内存地址是数据在物理内存中的存储位置
- 引用地址是对象在内存中的描述性地址,该地址与内存地址有区别
1.2 引用的特征
相同的数据在内存空间中仅占用一个存储空间,不同的变量使用相同的数据则指向相同的存储空间。
1.3 获取内存存储地址(编号)
语法格式:
id(数据)
id(变量名)

1.4 地址存储的特殊性
使用固定内存地址存储数据如下:
- -5到256的整数
- True和False
- 由字母、数字、下划线组成的字符串 使用临时内存地址存储数据如下:
- 小于-5 后大于256的整数
- 所有小数
- 包含祖母、数字、下划线之外的字符组成的字符串
2. 列表引用
2.1 列表存储空间
- 无变量引用
列表保存在临时引用地址中,该引用地址可以反复使用
- 有变量引用
列表保存在独立引用地址中,该引用地址专用,每个列表对象具有独立的引用地址
2.2 列表存储空间变更
1.列表变量指向引用地址,该引用地址中保存有存储列表信息的内存地址。
2.当列表中存储市局的空间不足时,会申请新的内存地址,并更新引用地址中对应的内存地址。
3.重新申请的内存地址将复制原始内存地址中的数据。
2.3 列表中的数据存储
1.列表中存储的数据都是数据对应的内存地址,没有真实数据
2.列表中的数据是通过引用地址的形式查找真实数据
3. 元组的引用
3.1 元组存储空间
- 空元组(无数据)
空元组指向统一的独立引用地址,所有空元组共用同一个引用地址
- 非空元组(有数据)
非空元组保存在独立引用地址中,每个元组对象具有独立引用地址
注:由于元组不支持修改,不存在重新申请空间的问题,元组创建的同时存储的数据已经固定,内存结构也固定。
3.2 元组中的数据存储(同列表)
1.元组中存储的数据都是数据对应的内存地址,没有真实数据
2.元组中的数据是通过引用地址的形式查找真实数据
注:元组不支持修改,但是元组中的数据如果是引用类型的,对应的数据可以在自身的内存地址中进行数据变更,对元组不影响。
4. 集合引用(同列表)
4.1 集合存储空间
- 无变量引用
集合保存在临时引用地址中,该引用地址可以反复使用
- 有变量引用
集合保存在独立引用地址中,该引用地址专用,每个列表对象具有独立的引用地址
4.2 集合存储空间的变更
1.集合变量指向引用地址,该引用地址中保存有存储集合信息的内存地址。
2.当集合中存储数据的空间不足时,会申请新的内存地址,并更新引用地址中对应的内存地址。
3.重新申请的内存地址将复制原始内存地址中的数据。
4.3 集合中的数据存储
1.集合中存储的数据都是数据对应的内存地址,没有真实数据
2.集合中的数据是通过引用地址的形式查找真实数据
5. 字典引用(同列表)
5.1 字典存储空间
- 无变量引用
字典保存在临时引用地址中,该引用地址可以反复使用
- 有变量引用
字典保存在独立引用地址中,该引用地址专用,每个字典对象具有独立的引用地址
5.2 字典存储空间变更
1.字典变量指向引用地址,该引用地址中保存有存储字典信息的内存地址。
2.当字典中存储数据的空间不足时,会申请新的内存地址,并更新引用地址中对应的内存地址。
3.重新申请的内存地址将复制原始内存地址中的数据。
5.3 字典中的数据存储 1.字典中存储的数据都是数据对应的内存地址,没有真实数据
2.字典中的数据是通过引用地址的形式查找真实数据
6. 对象引用
6.1 对象存储空间
- 无变量引用
对象保存在临时引用地址中,该引用地址可以反复使用
- 有变量引用
对象保存在独立引用地址中,该引用地址专用,每个列表对象具有独立的引用地址
6.2 对象中的变量数据
1.对象中的变量存储的都是对应数据的引用地址,没有真实数据 2.对象中的变量是通过引用地址的形式查找真实数据 3.对象中的变量存储形式是一个字典的形式,对变量的操作参照字典的操作方式,变量名为字典的key,变量值为字典的value
7.可变类型与不可变类型
7.1 基本概念
数据存储空间中的数据可以发生变化的数据称为可变类型数据
数据存储空间中的数据不能发生变化的数据称为不可变类型数据
7.2 分类
可变类型数据
- 列表
- 集合
- 字典
- 对象
不可变类型数据
- 数值
- 字符串
- 布尔
- 元组
7.3 函数调用时的实参
- 函数的实参使用可变类型数据时,在函数内部对形参进行数据操作,实参将发生改变
- 函数的实参使用不可变类型数据时,在函数内部对形参进行数据操作,实参将不会发生改变
7.4 函数定义时的形参
条件1:函数形参使用默认参数
条件2:函数调用时未对默认参数传值
条件3:函数的形参使用可变类型数据
上述3个条件同时满足时,多次调用对应函数时,操作的形参是同一个对象
以上7点是抽象概念,有助于更深层次的理解Python中的数据
8.对象的创建
8.1__new__方法的作用
__new__方法用于定义创建对象时执行的操作,__new__方法仅仅为用户提供一个创建对象时干预的入口,真正执行创建对象的操作由object类中的__new__方法完成。
8.2__new__方法定义
定义__new__方法是对object类中__new__方法的重写,重写该方法时必须再次调用object类中的__new__方法。

8.3__new__方法调用
__new__方法在创建对象时自动运行,无需手工执行调用该方法。
9. 对象的删除
9.1 del操作的作用
del操作的实质是断开变量与内存数据之间的引用,操作del执行后等同于对应变量未进行过定义。
9.2 del操作执行范围
1.删除定义的变量:功能等同于变量未定义

- 列表数据报错:索引不存在

- 元组对象报错:元组对象不支持对象的删除

- 字典对象报错:键错误,键不存在
3.对象中的属性:对象对象等同于该对象未定义过该属性

9.3__del__方法作用
__del__方法用于定义对象不存在任何引用时执行的操作。当对象断开了与最后一个变量之间的引用关系时,将执行该对象的__new__方法。
9.4__del__方法执行的范围
1.当手工执行断开变量与对象的最后一个引用时执行,即del操作
2.当程序执行完毕时,所有变量对应的引用都断开,此时执行,即退出程序
9.5__del__方法调用
__del__方法在对象断开与最后一个变量之间的引用关系时自动执行,无需手工执行调用该方法。
10. 对象判等
10.1 对象判等概念
当两个对象对应的引用地址相同时,称这两个对象是同一个对象。
10.2 对象判等语法格式
对象引用地址判等:
对象名 is 对象名 或 变量名 is 变量名
数据引用地址判定:
数据 is 数据
注:判等操作的结果是True或False
10.3 ==与is的区别
- =操作针对判定的内容不同,规则不同。例如数值性数据比较数值的大小,不考虑是整数还是小数。字符串比较字符串的内容是否相同,不考虑引用地址是否相同。
- is操作只针对地址进行判定,只要地址相同即返回True,否则返回False
11. 单例模式
11.1 单例模式的作用
控制一个类只能创建出单个实例对象。
11.2 单例模式书写的规范
class 类名:
__instance = None
def __new__(cls,*args,**kwargs):
if cls.__instance is None:
cls.__instance = object.__new__(类名)
return cls.__instance
11.3 注意事项
1.定义的类变量要进行私有化,负责可以通过类名在类的外部访问到
2.对象的判空惭怍使用is进行判定