Python中数据的存储与对象管理

1. 引用

1.1 引用的概念

  • 引用是一种变量指向数据存储空间的现象
  • 内存地址是数据在物理内存中的存储位置
  • 引用地址是对象在内存中的描述性地址,该地址与内存地址有区别

1.2 引用的特征

相同的数据在内存空间中仅占用一个存储空间,不一样的变量使用相同的数据则指向相同的存储空间。python

1.3 获取内存存储地址(编号)

语法格式:函数

id(数据)
id(变量名)
复制代码

1.4 地址存储的特殊性

使用固定内存地址存储数据以下:spa

  • -5到256的整数
  • True和False
  • 由字母、数字、下划线组成的字符串 使用临时内存地址存储数据以下:
  • 小于-5 后大于256的整数
  • 全部小数
  • 包含祖母、数字、下划线以外的字符组成的字符串

2. 列表引用

2.1 列表存储空间

  • 无变量引用

列表保存在临时引用地址中,该引用地址能够反复使用code

  • 有变量引用

列表保存在独立引用地址中,该引用地址专用,每一个列表对象具备独立的引用地址cdn

2.2 列表存储空间变动

1.列表变量指向引用地址,该引用地址中保存有存储列表信息的内存地址。对象

2.当列表中存储市局的空间不足时,会申请新的内存地址,并更新引用地址中对应的内存地址。blog

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.删除定义的变量:功能等同于变量未定义

2.删除存储模型中的数据;将数据按照变量的形式看待,功能等同于未定义过对应的数据

  • 列表数据报错:索引不存在
  • 元组对象报错:元组对象不支持对象的删除
  • 字典对象报错:键错误,键不存在
    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进行断定

相关文章
相关标签/搜索