Python的in,is和id函數代碼實例
1. in 和 not in —— 判斷某個序列中是否存在某值
# inaa = [1,2,3,’Cathy’,’太平洋’]if ’大西洋’ in aa: print(’yes’)else: print(’no’) # no# not inif ’大西洋’ not in aa: print(’yes’) # yeselse: print(’no’) #-------------------------------------------------------# 判斷字符串是否存在某子串 if ’馬來西亞’ in ’馬來西亞是一個太平洋國家’: print(’of course’) # 輸出 ’of course’# ------------------------------------------------------if 0 in (0,1,2,3): print(’hhhh’) #輸出 ’hhhh’if 0 in [0,1,2,3]: print(’kkkk’) #輸出 ’hhhh’
2. is 和 is not —— 判斷兩個標識符是不是指向同一個地址(同一個對象),類似于判斷 id(x) == id(y) —— 具體對于相同值的內存管理
# 相同bb = 234cc = 234if bb is cc: print(’bb is cc’) #結果是 bb is cc else: print(’bb is not cc’)print(id(bb)) # id()值一樣,因為python的優化機制,相同的’數值’數據會使用同樣的內存空間。print(id(cc))# 相同bb = ’hhh’cc = ’hhh’if bb is cc: print(’bb is cc’) #同樣也是因為python的自身機制,在某些’字符’位數下,相同字符串也會指向同一地址 ------ 有說20位的,與系統有關else: print(’bb is not cc’)# 相同,python的對象引用機制bb = [1,2,3] cc = bbif bb is cc: print(’bb is cc’) #結果是 bb is cc else: print(’bb is not cc’)# 不相同bb = [1,2,3]cc = [1,2,3]if bb is cc: print(’bb is cc’) else: print(’bb is not cc’) #結果是 bb is not ccprint(id(bb)) # id()值不一樣print(id(cc))
3. id() 函數,獲取對象的內存地址(不同電腦不一樣),例如:
bb = ’hhh’cc = bbif bb is cc: print(’bb is cc’) #結果是 bb is cc else: print(’bb is not cc’)print(id(bb)) # id()值一樣,均為 1680346901336print(id(cc))
4. 可變數據類型和不可變數據類型
不可變數據類型: 當該類型的變量值發生了改變,它對應的內存地址也會發生改變。
可變數據類型 :當該類型的變量值發生了改變,它對應的內存地址不發生改變。
這里的可變不可變,是指內存中的值內容(value)是否可以被改變。如果是不可變類型,在操作對象本身的時候,必須在內存新申請一塊內存(因為原內存內容是不可變的)。如果是可變類型,操作對象的時候,不需要再在其他地方申請內存,只需要在此對象后面連續申請內存,所以它的地址會保持不變,但該內存區域大小會變化。
在python中:
int,string,float,tuple —— 屬于python的不可變類型
object、list、set —— 屬于python的可變類型
使用:可以使用內建函數id()來確認對象的地址在兩次賦值前后是否發生了變化。
例如:分別對于數值和列表類型:
a = 1print(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值沒有變化
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。