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的内存地址是: 25780755580083、元祖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的内存地址是: 27699922498642、函数的传递引用
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以上就是小编今天的分享了,希望可以帮助到大家。