python 引用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 引用相关的知识,希望对你有一定的参考价值。

参考技术A python引用有哪些?来和我一起解读一下吧~

python不允许程序员用传值和传引用,可以选择选用“传对象引用”的方式,这种方式等同于将传值和传引用综合起来,如果函数收到的是一个可变对象的引用,就能修改对象的原始值,相当于通过“传引用”来传递对象,如果函数收到的是一个不可变对象的引用,就不能直接修改原始对象,相当于通过“传值’来传递对象。

python引用主要有:不可变数据引用和可变数据引用,其中不可变数据引用包括:字符串String、浮点型Float、元祖Tuple。

1、字符串String
#1.字符串引用 a='1234' b=a a='hello' print('a:',a) #a:hello print('b:',b)  #b:1234 #查看内存地址 print('a的内存地址是:',id(a)) print('a的内存地址是:',id(b)) 结果是: a: hellob: 1234a的内存地址是: 1651738050720a的内存地址是: 1651737219456 分析:b的值指向a的值。python开辟了新的内存空间给b,所以a和b的内存地址不一样。
2、浮点型Float
#2.浮点型引用 x=3.14 y=x x=9.88 print('x:',x) print('y:',y) print('x的内存地址是:',id(x)) print('y的内存地址是:',id(y)) 结果是: x: 9.88y: 3.14x的内存地址是: 2578075558248y的内存地址是: 2578075558008
3、元祖Tuple
元祖虽然是序列,且包含多个元素,但是不支持原处修改,如tuple[1]=1是非法的。#3.元祖引用 t1=(1,2,3,4,5) t2=t1 t1=('tuple','hello') print('t1:',t1) print('t2:',t2) print('t1的内存地址是:',id(t1)) print('t2的内存地址是:',id(t2)) 结果是: t修改后为: (1, 2, 3, ['x', 'a', 'D', 'b']) 可变数据引用包括:列表引用、字典引用、函数的传递引用
1、列表引用
#4 列表的可变引用 list1=[1,2,3,4,5] list2=list1 list1[3]='list' print('list1=====%s'%list1) print('list2=====%s'%list2) print('list1的内存地址是:',id(list1)) print('list2的内存地址是:',id(list2)) 结果是: list1=====[1, 2, 3, 'list', 5]list2=====[1, 2, 3, 'list', 5]list1的内存地址是: 2769992249864list2的内存地址是: 2769992249864
2、函数的传递引用
def eggs(someParameter):     someParameter.append('hello list') spam=[1,2,3,4] eggs(spam) print(spam) 结果是: [1, 2, 3, 4, 'hello list']
3、字典引用 #5 字典的引用 a='name':'Cathy','age':'27','job':'coder' b=a a['age']='30' b['name']='Bob' print('a======%s'%a) print('b======%s'%b) print('a的内存地址是:', id(a)) print('b的内存地址是:', id(b)) 结果是: a======'name': 'Bob', 'age': '30', 'job': 'coder' b======'name': 'Bob', 'age': '30', 'job': 'coder' a的内存地址是: 2510825602792 b的内存地址是: 2510825602792

python回顾——引用

引用

引用概念

  引用是一种变量指向数据存储空间的现象

  内存地址是数据在物理内存中的存储位置

  引用地址是对象在内存中的描述性地址,该地址与内存地址有区别

 

 

引用特征

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

 

 

获取内存存储地址

  语法格式:

    id(数据)

    id(变量名)

 

 

地址存储特殊性

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

    -5到256的整数

    True和False

    由字母、数字、下滑线组成的字符串

 

  使用临时内存地址存储数据如下:

    小于-5后大于256的整数

    所有小数

    包含字母、数字、下滑线之外的字符组成的字符串

 

 

 

列表引用

列表存储空间

  无变量引用:列表保存在临时引用地址中,该引用地址可以反复使用

  有变量引用:列表保存在独立引用地址中,该引用地址专用,每个列表对象具有独立的引用地址

 

 

列表存储空间变更

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

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

  3.重新申请的内存地址将复制原始内存地址中的数据

 

 

列表中的数据存储

  1.列表中存储的数据都是数据对应内存地址,没有真实数据

  2.列表中的数据是通过引用地址的形式查找真实数据

 

 

 

元组引用

元组存储空间

  空元组(无数据)空元组指向统一独立引用地址,所有空元组共用同一个引用地址

  非空元组(有数据)非空元组保存在独立引用地址中,每个元组对象具有独立引用地址

  注:由于元组不支持修改,不存在重新申请空间的问题,元组创建的同时存储的数据已经固定,内存结构也固定。

 

 

元组中的数据存储(同列表)

  1.元组中存储的数据都是数据对应内存地址,没有真实数据

  2.元组中的数据是通过引用地址的形式查找真实数据

  注:元组不支持修改,但是元组中的数据如果是引用类型的,对应的数据可以在自身的内存地址中进行数据变更,对元组不影响

 

 

 

集合引用(同列表)

集合存储空间

  无变量引用:集合保存在临时引用地址中,该引用地址可以反复使用

  有变量引用:集合保存在独立引用地址中,该引用地址专用,每个集合对象具有独立的引用地址

 

 

集合存储空间变更

  1.集合变量指向引用地址,该引用地址保存存储集合信息内存地址

  2.当集合中存储数据空间不足时,会申请新的内存地址,并更新引用地址对应的内存地址

  3.重新申请的内存地址将复制原始内存地址中的数据

 

集合中的数据存储

  1.集合中存储的数据都是数据对应的内存地址,没有真实数据

  2.集合中的数据是通过引用地址的形式查找真实数据

 

 

 

字典引用(同列表)

字典存储空间

  无变量引用:字典保存在临时引用地址中,该引用地址可以反复使用

  有变量引用:字典保存在独立引用地址中,该引用地址专用,每个字典对象具有独立的引用地址

 

 

字典存储空间变更

  1.字典变量指向引用地址,该引用地址中保存有存储字典信息内存地址

  2.当字典中存储数据空间不足时,会申请新的内存地址,并更新引用地址对应的内存地址

  3.重新申请的内存地址将复制原始内存地址中的数据

 

 

字典中的数据存储

  1.字典中存储的数据都是数据对应的内存地址,没有真实数据

  2.字典中的数据是通过引用地址的形式查找真实数据

 

 

 

对象引用

对象存储空间

  无变量引用:对象保存在临时引用地址中,该引用地址可以反复使用

  有变量引用:对象保存在独立引用地址中,该引用地址专用,每个对象具有独立的引用地址

 

 

对象中的变量数据

  1.对象中的变量存储的都是对应数据的引用地址,没有真实数据

  2.对象中的变量是通过引用地址的形式查找真实数据

  3.对象中的变量存储形式是一个字典的形式,对变量的操作参照字典的操作方式,变量名为字典的key,变量值为字典的value

 

 

 

可变类型与不可变类型

基本概念

  数据存储空间中的数据可以发生变化的数据称为可变类型数据

  数据存储空间中的数据不能发生变化的数据称为不可变类型数据

 

 

分类

  可变类型数据:列表,集合,字典,对象

  不可变类型数据:数值,字符串,布尔,元组

 

 

函数调用时的实参

  函数的实参使用可变类型数据时,在函数内部对形参进行数据操作实参将发生改变

  函数的实参使用不可变类型数据时,在函数内部对形参进行数据操作,实参将不会发生改变

 

 

函数定义时的形参

  条件1:函数形参使用默认参数

  条件2:函数调用时未对默认参数传值

  条件3:函数的形参使用可变类型数据

  上述3个条件同时满足时,多次调用对应函数时,操作的形参是同一个对象 

 




以上是关于python 引用的主要内容,如果未能解决你的问题,请参考以下文章

在python中通过引用传递引用

python 10

python的引用计数分析

Python引用复制,参数传递,弱引用与垃圾回收

Python中对象的引用和共享引用

Python C API 引用计数器