1. 程式人生 > 程式設計 >Python的in,is和id函式程式碼例項

Python的in,is和id函式程式碼例項

1. in 和 not in —— 判斷某個序列中是否存在某值

# in
aa = [1,2,3,'Cathy','太平洋']
if '大西洋' in aa:
  print('yes')
else:
  print('no') # no

# not in
if '大西洋' not in aa:
  print('yes') # yes
else:
  print('no')
  
#-------------------------------------------------------
# 判斷字串是否存在某子串  
if '馬來西亞' in '馬來西亞是一個太平洋國家':  
  print('of course') # 輸出 'of course'

# ------------------------------------------------------
if 0 in (0,1,3):
  print('hhhh') #輸出 'hhhh'

if 0 in [0,3]:
  print('kkkk') #輸出 'hhhh'

2. is 和 is not —— 判斷兩個識別符號是不是指向同一個地址(同一個物件),類似於判斷 id(x) == id(y) —— 具體對於相同值的記憶體管理

# 相同
bb = 234
cc = 234
if 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,3] 
cc = bb
if bb is cc:
  print('bb is cc') #結果是 bb is cc 
else:
  print('bb is not cc')

# 不相同
bb = [1,3]
cc = [1,3]
if bb is cc:
  print('bb is cc')  
else:
  print('bb is not cc') #結果是 bb is not cc
print(id(bb)) # id()值不一樣
print(id(cc))

3. id() 函式,獲取物件的記憶體地址(不同電腦不一樣),例如:

bb = 'hhh'
cc = bb
if bb is cc:
  print('bb is cc') #結果是 bb is cc 
else:
  print('bb is not cc')
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值沒有變化

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。