python之python的引用

python之python的引用

  • 引用
  • 列表引用
  • 元组引用
  • 集合引用
  • 字典引用(通列表)
  • 对象引用
  • 可变类型与不可变类型

引用

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

# 举例
x=2
print(id(x))
print(id(2))
  1. 地址存储的特殊性
  • 使用固定内存地址存储数据的:
    ①-5到256的整数
    ②True和False
    ③由字母、数字、下划线组成的字符串
  • 使用临时内存地址存储数据的:
    ①小于-5或者大于256的整数
    ②所有小数
    ③包含字母、数字、下划线之外的字符组成的字符串

列表引用

  1. 列表存储空间
  • 无变量引用
    列表保存在临时引用地址中,该引用地址可以反复使用
  • 有变量引用
    列表保存在独立引用地址中,该引用地址专用,每个列表对象具有独立的引用地址
  1. 列表存储空间变更
  • 列表变量指向引用地址,该引用地址中保存有存储列表信息的内存地址
  • 当列表信息中存储数据的空间不足时,会申请新的内存地址,并更新引用地址中对应的内存地址
  • 重新申请的内存地址将复制原始地址中的数据
  1. 列表中的数据存储
  • 列表中存储的数据都是数据对应的内存地址,没有真实数据
  • 列表中的数据是通过引用地址的形式查找真实数据

元组引用

  1. 元组存储空间
  • 空元组(无数据)
    空元组指向统一的独立引用地址,所有空元组共用同一个引用地址
  • 非空元组(有数据)
    非空元组保存在独立引用地址中,每个元组对象具有独立引用地址
    注意:由于元组不支持修改,不存在重新申请空间的问题,元组创建的同时存储的数据已经固定,内存结构也固定
  1. 元组中的数据存储(同列表)
  • 元组中存储的数据都是数据对应的内存地址,没有真实数据
  • 元组中的数据是通过引用地址的形式查找真实数据
    注意:元组不支持修改,但是元组中的数据如果是引用类型的,对应的数据可以在自身的内存地址中进行数据变更,对元组不影响

集合引用

  1. 集合存储空间
  • 无变量引用
    集合保存在临时引用地址中,该引用地址可以反复使用
  • 有变量引用
    集合保存在独立引用地址中,该引用地址专用,每个集合对象具有独立的引用地址
  1. 集合存储空间变更
  • 集合变量指向引用地址,该引用地址中保存有存储集合信息的内存地址
  • 当集合中存储数据的空间不足时,会申请新的内存地址,并更新引用地址中对应的内存地址
  • 重新申请的内存地址将复制原始内存中的地址
  1. 集合中的数据存储
  • 集合中存储的数据都是数据对应的内存地址,没有真实数据
  • 集合中的数据是通过引用地址的形式查找真实数据

字典引用(通列表)

  1. 字典存储空间
  • 无变量引用
    字典保存在临时引用地址中,该引用地址可以反复使用
  • 有变量引用
    字典保存在独立引用地址中,该引用地址专用,每个字典对象具有独立的引用地址
  1. 字典存储空间的变更
  • 字典变量指向引用地址,该引用地址中保存有存储字典信息的内存地址
  • 当字典中存储数据的空间不足时,会申请新的内存地址,并更新引用地址中对应的内存地址
  • 重新申请的内存地址将复制原始内存地址中的数据
  1. 字典中的数据存储
  • 字典中存储的数据都是数据对应的内存地址,没有真实数据
  • 字典中的数据是通过引用地址的形式查找真实数据

对象引用

  1. 对象存储空间
  • 无变量引用
    对象保存在临时引用地址中,该引用地址可以反复使用
  • 有变量引用
    对象保存在独立引用地址中,该引用地址专用,每个列表对象具有独立的引用地址
  1. 对象中的变量数据
  • 对象中的变量存储的都是对应数据的引用地址,没有真实数据
  • 对象中的变量是通过引用地址的形式查找真实数据
  • 对象中的变量存储形式是一个字典的形式,对变量的操作参照字典的操作方法,变量名为字典的key,变量值为字典的value

可变类型与不可变类型

  1. 基本概念
    数据存储空间中的数据可以发生变化的数据称为可变类型数据。
    数据存储空间中的数据不可能发生变化的数据称为不可变数据。
  2. 分类
  • 可变类型数据:列表、集合、字典、对象
  • 不可变类型数据:数值、字符串、布尔、元组
  1. 函数调用时的实参
  • 函数的实参使用可变类型数据时,在函数内部对形参进行数据操作,实参将发生改变
  • 函数的实参使用不可变类型数据时,在函数内部对形参进行数据操作,实参将不会发生改变
  1. 注意
    如果函数满足以下三个条件,多次调用时,操作的形参是同一个对象:
    ①函数形参使用默认参数
    ②函数调用时未对默认参数传值
    ③函数的形参使用可变类型数据

你可能感兴趣的:(Python,python)