Python中運算子 和 is 的詳解

2022-10-04 21:33:37 字數 1154 閱讀 5621

前言

在講is和==這兩種運算子區別之前,首先要知道python中bdzox物件包含的三個基本要素,分別是:id(身份標識)、python type()(資料型別)和value(值)。is和==都是對物件進行比較判斷作用的,但對物件比較判斷的內容並不相同。下面來看看具體區別在哪。

python中比較兩個物件是否相等,一共有兩種方法,簡單來說,它們的區別如下:

is是比較兩個引用是否指向了同乙個物件(引用比較)。

==是比較兩個物件是否相等。

>>> a = [1, 2, 3]

>>> b = a

>>> b is a # a的引用複製給b,他們在記憶體中其實是指向了用乙個物件

true

>>> b == a # 當然,他們的值也是相等的

true

>>> b = a[:] # b通過a切片獲得a的部分,這裡的切片操作重新分配了物件,

>>> b is a # 所以指向的不是同乙個物件了

false

>>> b == a # 但他們的值還是相等的

true

實現原理

is比較的是兩者是否是同乙個物件,所以比程式設計客棧較的是記憶體位址(id是否相同)。

==是值比較。不可變物件,例如int,str,它會直接進行值比較。對於python已知的物件,會呼叫他們的__eq__函式來比較。(其實已知的物件應該也是通過內建的__eq__函式來比較的)。對於自定義的物件,如果實現了__eq__函式,就會使用它比較,如果沒有實現,效果和==是一樣的。

物件快取機制

python會對比較小的物件快取,下次用到比較小的物件時,會去快取區查詢,如果找到,不會再開闢新的記憶體,而是繼續把小物件的位址賦給新的值。例子:

>>> c = 1

>>> d = 1

>>> print(c is d)

true

>>> 1000 is 10**3

false

>>> 1000 == 10**3

true

通過計算得到的賦值,不會使用快取區。從第乙個**示例中可以看出。

對於字串,你可以通過使用intern函式強制使用快取區。

總結本文標題: python中運算子"=="和"is"的詳解

本文位址: /jiaoben/python/165758.html

python中的運算和運算子

運算 由乙個以上的值經過變化得到新值得過程,就是運算。運算子 用於運算的符號,就是運算子 運算的分類 1.算數運算 2.比較運算 關係運算 3.賦值運算 4.邏輯運算 5.位運算 6.成員運算 7.身份運算 除法運算 加法運算 減法運算 乘法運算 除法運算 取餘運算 取商運算 地板除 冪運算 小於運...

C 中 運算子 和 運算子

運算子定義在將可空型別分配給非可空型別時返回的預設值。int?c null 若 c 為 null,則 d 為 1,否則把 c 值賦予 d int d c 1 型別名稱後加問號,如 int?i null double?d null bool?b null 可指定可為 null 的 int double...

python 運算子 Python運算子

python語言支援以下型別的運算子 算術運算子 比較 關係 運算子 賦值運算子 邏輯運算子 位運算子 成員運算子 身份運算子 運算子優先順序 1 算術運算子 加號 減號 乘 除 取餘 乘方 整除 1 其中除號 要注意 在python2中,用作整除。解決方法有三 1 兩個相除的數中有乙個為實數。2 ...