python is和==的區別是什麼?

Chuzilun發表於2020-12-18

眾所周知,我們的python中有很多的運算子,其中有的是經常使用的有的是不常使用的,其中比較常用的有is==然後呢,他們其實有的時候是通用的,都是作為相等比值來使用的。但是有的時候,他們並不能劃等號。
先上一下程式碼。
pythonis和==的區別

a = 257

b = 257

print(a is b)

print(a == b)

#out1: False

#out2: True
我們可以看到,雖然都定義的是257,但是我們通過print顯示的時候,會發現is是false,==是true。這是為什麼呢?
我們首先要先了解一下python中物件包含的三個基本要素。分別是id(身份標識),type(物件型別),value(物件值)。
然後我們再看一下is和==的介紹。

is —- 比較的是兩個物件的id值是否相等,也就是比較倆物件是否為同一個例項物件,是否指向同一個記憶體地址。

== —- 比較的是兩個物件的內容是否相等,預設會呼叫物件的eq()方法。

== 是 python中標準操作符的比較操作符,它是用來比較判斷兩個物件的 value (值)
通過==我們可以得到這兩個物件的值是否相等。

a = ‘cheesezh’

b = ‘cheesezh’

print(a == b)

#True

is 也被稱為同一性運算子,它是比較判斷物件間的唯一身份標識,也就是 id 是否相同。
Python程式是由程式碼塊構成的,其中程式碼塊是作為程式最小的基本單位來執行,程式碼塊是一個模組檔案、一個函式體、一個類、互動式命令中的單行程式碼,Python出於對效能的考慮,但凡是不可變物件,在同一個程式碼塊中的物件,只有是值相同的物件,就不會重複建立,而是直接引用已經存在的物件。

通過以上的內容,可以得到的結論是,同一個程式碼塊中的不可變的物件,只要他們的值是相等的就不會重複建立新的物件。而是通過引用等方法來呼叫同一地址的值。小整數物件[-5,256]是全域性直譯器範圍內可以被重複使用的物件,永遠不會被回收。
python is和==的區別是什麼

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章