python引用有哪些?來和小編一起解讀一下吧~
python不允許程序員用傳值和傳引用,可以選擇選用“傳對象引用”的方式,這種方式等同于將傳值和傳引用綜合起來,如果函數(shù)收到的是一個可變對象的引用,就能修改對象的原始值,相當于通過“傳引用”來傳遞對象,如果函數(shù)收到的是一個不可變對象的引用,就不能直接修改原始對象,相當于通過“傳值’來傳遞對象。
python引用主要有:不可變數(shù)據(jù)引用和可變數(shù)據(jù)引用,其中不可變數(shù)據(jù)引用包括:字符串String、浮點型Float、元祖Tuple。
1、字符串String
#1.字符串引用 a='1234' b=a a='hello' print('a:',a)?#a:hello print('b:',b)??#b:1234 #查看內(nèi)存地址 print('a的內(nèi)存地址是:',id(a)) print('a的內(nèi)存地址是:',id(b)) 結(jié)果是: a:?hellob:?1234a的內(nèi)存地址是:?1651738050720a的內(nèi)存地址是:?1651737219456 分析:b的值指向a的值。python開辟了新的內(nèi)存空間給b,所以a和b的內(nèi)存地址不一樣。
2、浮點型Float
#2.浮點型引用 x=3.14 y=x x=9.88 print('x:',x) print('y:',y) print('x的內(nèi)存地址是:',id(x)) print('y的內(nèi)存地址是:',id(y)) 結(jié)果是: x:?9.88y:?3.14x的內(nèi)存地址是:?2578075558248y的內(nèi)存地址是:?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的內(nèi)存地址是:',id(t1)) print('t2的內(nèi)存地址是:',id(t2)) 結(jié)果是: 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的內(nèi)存地址是:',id(list1)) print('list2的內(nèi)存地址是:',id(list2)) 結(jié)果是: list1=====[1,?2,?3,?'list',?5]list2=====[1,?2,?3,?'list',?5]list1的內(nèi)存地址是:?2769992249864list2的內(nèi)存地址是:?2769992249864
2、函數(shù)的傳遞引用
def?eggs(someParameter): ????someParameter.append('hello?list') spam=[1,2,3,4] eggs(spam) print(spam) 結(jié)果是: [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的內(nèi)存地址是:',?id(a)) print('b的內(nèi)存地址是:',?id(b)) 結(jié)果是: a======{'name':?'Bob',?'age':?'30',?'job':?'coder'} b======{'name':?'Bob',?'age':?'30',?'job':?'coder'} a的內(nèi)存地址是:?2510825602792 b的內(nèi)存地址是:?2510825602792
以上就是小編今天的分享了,希望可以幫助到大家。