首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 身分運算子 (is / is not) 詳細說明與範例

     編輯:更多程式設計知識

什麼是身分運算子?

Python 的身分運算子 is 與 is not 用於比較兩個物件是否為「同一個記憶體位址」(即同一個物件實例),而非比較數值是否相等。

運算子說明

運算子描述範例
is若兩側物件為同一實例則為 Truea is b
is not若兩側物件非同一實例則為 Truea is not b

程式碼範例

#!/usr/bin/python

a = 20
b = 20

if a is b:
    print("Line 1 - a and b have same identity")
else:
    print("Line 1 - a and b do not have same identity")

if id(a) == id(b):
    print("Line 2 - a and b have same identity")
else:
    print("Line 2 - a and b do not have same identity")

b = 30
if a is b:
    print("Line 3 - a and b have same identity")
else:
    print("Line 3 - a and b do not have same identity")

if a is not b:
    print("Line 4 - a and b do not have same identity")
else:
    print("Line 4 - a and b have same identity")

執行結果

Line 1 - a and b have same identity
Line 2 - a and b have same identity
Line 3 - a and b do not have same identity
Line 4 - a and b do not have same identity

深度解析

  • 小整數快取:CPython 實作會快取 -5 到 256 的整數物件,因此 a = 20; b = 20 實際指向同一個記憶體位址,is 為 True。
  • id(obj) 回傳物件的記憶體位址(整數),a is b 等價於 id(a) == id(b)。
  • 將 b 重新指派為 30(超出快取範圍或新建物件),a is b 變為 False。
  • 不可變物件(字串、元組)可能被最佳化共享,但不應依賴此行為比較值,請改用 ==。

最佳實務

  1. 比較數值或內容:使用 ==、!=。
  2. 檢查是否為 None:if x is None:(官方推薦)。
  3. 檢查是否為同一實例(如單例模式):使用 is。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved