Python的in,is和id函数代码实例
1.in和notin——判断某个序列中是否存在某值
#in
aa=[1,2,3,'Cathy','太平洋']
if'大西洋'inaa:
print('yes')
else:
print('no')#no
#notin
if'大西洋'notinaa:
print('yes')#yes
else:
print('no')
#-------------------------------------------------------
#判断字符串是否存在某子串
if'马来西亚'in'马来西亚是一个太平洋国家':
print('ofcourse')#输出'ofcourse'
#------------------------------------------------------
if0in(0,1,2,3):
print('hhhh')#输出'hhhh'
if0in[0,1,2,3]:
print('kkkk')#输出'hhhh'
2.is和isnot——判断两个标识符是不是指向同一个地址(同一个对象),类似于判断id(x)==id(y)——具体对于相同值的内存管理
#相同
bb=234
cc=234
ifbbiscc:
print('bbiscc')#结果是bbiscc
else:
print('bbisnotcc')
print(id(bb))#id()值一样,因为python的优化机制,相同的'数值'数据会使用同样的内存空间。
print(id(cc))
#相同
bb='hhh'
cc='hhh'
ifbbiscc:
print('bbiscc')#同样也是因为python的自身机制,在某些'字符'位数下,相同字符串也会指向同一地址------有说20位的,与系统有关
else:
print('bbisnotcc')#相同,python的对象引用机制
bb=[1,2,3]
cc=bb
ifbbiscc:
print('bbiscc')#结果是bbiscc
else:
print('bbisnotcc')
#不相同
bb=[1,2,3]
cc=[1,2,3]
ifbbiscc:
print('bbiscc')
else:
print('bbisnotcc')#结果是bbisnotcc
print(id(bb))#id()值不一样
print(id(cc))
3.id()函数,获取对象的内存地址(不同电脑不一样),例如:
bb='hhh'
cc=bb
ifbbiscc:
print('bbiscc')#结果是bbiscc
else:
print('bbisnotcc')
print(id(bb))#id()值一样,均为1680346901336
print(id(cc))
4.可变数据类型和不可变数据类型
不可变数据类型:当该类型的变量值发生了改变,它对应的内存地址也会发生改变。
可变数据类型:当该类型的变量值发生了改变,它对应的内存地址不发生改变。
这里的可变不可变,是指内存中的值内容(value)是否可以被改变。如果是不可变类型,在操作对象本身的时候,必须在内存新申请一块内存(因为原内存内容是不可变的)。如果是可变类型,操作对象的时候,不需要再在其他地方申请内存,只需要在此对象后面连续申请内存,所以它的地址会保持不变,但该内存区域大小会变化。
在python中:
int,string,float,tuple——属于python的不可变类型
object、list、set——属于python的可变类型
使用:可以使用内建函数id()来确认对象的地址在两次赋值前后是否发生了变化。
例如:分别对于数值和列表类型:
a=1
print(id(a))
a=a+1#a本身发生变化
print(id(a))
#结果分别为:140732932812544和140732932812576,表示id值发生了变化
a=['1']
print(id(a))
a.append('sss')#a本身发生变化
print(id(a))
print(a)#输出:['1','sss']
#结果分别为:1680347029768和1680347029768,表示id值没有变化
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。