python is is not

2022-05-15 18:16:26 字數 3706 閱讀 3282

1、is 、is  not

1)是,返回true;

2)不是,返回false

注意:小整數物件池

若是整數且在小整數池內,多個變數繫結同一數值時,實際上是這幾個變數繫結(引用)同一個物件。

小整數物件池[-5,256],左閉右閉區間。

為避免頻繁的建立和銷燬記憶體空間,提高效率、優化運算速度,python內建小整數物件池,這個範圍內的整數在python初始化的時候就建立了,在記憶體中存在。

del語句刪除的時候,不會被銷燬、釋放,可以一直重複使用。

這些整數一直存在,所以這個範圍內的相同整數是同一個物件,它們的id相同,可用id()函式驗證

整數和字串是不可變物件,也就意味著可以用來共享,如100個“python”字串變數可以共享一個“python”字串物件,而不是建立100個“python”字串

in [20]: a = 100in [21]: b = 100in [22]: c = 500in [23]: d = 500in [24]: a is

bout[24]: true

in [25]: c is

dout[25]: false

當變數繫結的數值在小整數池中時,不會建立新的物件,而是直接引用小整數物件池中的資料。

大整數物件池

當數值不在小整數物件池內時,會自動建立新的物件。但是,處於同一個**塊的相同數值,是同一個物件。

一個**塊就是一個【.py】檔案。

2 a = 100

3 b = 100

4 c = 500

5 d = 500

6print(a is b) #

true

7print(c is d) #

true

8print(a is c) #

false

字串的判斷

判斷兩個字串是否是同一個物件時,要注意字串的intern機制。

intern機制

即值同樣的字串物件僅僅會儲存一份,放在一個字串池中,是共用的,當然,肯定不能改變,這也決定了字串必須是不可變物件

【linux環境+終端下執行+python3.5.2】

字串本身沒有字元限制(個人親測,待後續專業驗證。看到網上說字串intern機制有20個字元限制觸發條件)

字串本身字元(含有特殊字元和不含特殊字元)超過20,結果仍為true。

字串拼接,字串不含特殊字元,字串超過20,結果則為false。

字串含特殊字元拼接,拼接後字元長度超過20、不超過20,均為false

【在pycharm 2019.3.1 + python 3.7.6】

字串本身長度(不含特殊字元)超過20、不超過20,結果均為true。

字串本身長度(含特殊字元)超過20、不超過20,結果均為true

含有特殊字元時拼接,拼接後字元長度超過20、不超過20,結果均為true

字串不含特殊字元,拼接後字元長度超過20、不超過20,結果均為true

#

linux + 終端 + python 3.5.2

#a = 100

#b = 100

#c = 500

#d = 500

#print(a is b) #true

#print(c is d) #true

#s1= "qasf"

#s2 = "qasf"

#print(s1 is s2) #true

#不含特殊字元,拼接後字元超過20為false。不超過20,為true

#s1= "qasf" *5

#s2= "qasf" * 5

#print(len(s1))

#print(s1 is s2) #true

s1 = "

qasf

" *5 +"a"

s2 = "

qasf

" *5 + "a"

print

(len(s1))

print(s1 is s2) #

#含特殊字元時,拼接,拼接後字元長度超過20、不超過20,結果均為false

#s1 = "@asf" *4

#s2 = "@asf" *4

#print(len(s1))

#print(s1 is s2) #true

#含特殊字元,字串本身長度超過20、不超過20,結果均為true

#s1= "[email protected]@asfaqwertasdf"

#s2= "[email protected]@asfaqwertasdf"

#print(len(s1))

#print(s1 is s2)

## 不含特殊字元,字串本身長度超過20、不超過20,結果均為true

#s1 = "qaaaaasssssdddddfffff"

#s2 = "qaaaaasssssdddddfffff"

#print(len(s1))

#print(s1 is s2)

print

(s1)

print

(s2)

print(s1 is s2)

【在pycharm 2019.3.1 + python 3.7.6】     

#

pycharm 中 +python 3.7.6

#a = 100

#b = 100

#c = 500

#d = 500

#print(a is b) #true

#print(c is d) #true

#s1 = "qasf" * 4

#s2 = "qasf" *4

#print(s1 is s2) #true

#s1= "qasf"

#s2 = "qasf"

#print(s1 is s2) #true

#不含特殊字元,拼接後字元超過20、不超過20,結果均為true

#s1= "qasf" *6

#s2= "qasf" * 6

#print(len(s1))

#print(s1 is s2) #true

#s1 = "qasf" *5 +"a"

#s2 = "qasf" *5 + "a"

#print(len(s1))

#print(s1 is s2) #

#含特殊字元時,拼接,拼接後字元長度超過20、不超過20,結果均為true

#s1 = "@asf" *6

#s2 = "@asf" *6

#print(len(s1))

#print(s1 is s2) #true

#含特殊字元,字串本身長度超過20、不超過20,結果均為true

#s1= "@[email protected]"

#s2= "@[email protected]"

#print(len(s1))

#print(s1 is s2)

#不含特殊字元,字串本身長度超過20、不超過20,結果均為true

#s1 = "aaaasssssdddddfffff"

#s2 = "aaaasssssdddddfffff"

#print(len(s1))

#print(s1 is s2)

print

(s1)

print

(s2)

print(s1 is s2)

python python xx

當你看到 this 的時,就知道不要呼叫它。為什麼?因為它的意思是它是用於python呼叫的,如下 name igor name len 4 len name 4 number 10 number add 20 30 number 20 30 xx 經常是操作符或本地函式呼叫的magic metho...

Python usr bin python

usr bin python是告訴作業系統執行這個指令碼的時候,呼叫 usr bin下的python直譯器 usr bin env pyth...

is in Python

在python中應該避免將 is 運算子用於比較 像 數值 和 字串 這種不可變的值。由於python內部操作這些物件的方式,使得對這些物件...