Python「is」和「 」的區別

2022-09-16 05:24:12 字數 1362 閱讀 7670

變數:用來標識(identify)一塊記憶體區域。為了方便表示記憶體,我們操作變數實質上是在操作變數指向的那塊記憶體單元。編譯器負責分配。我們可以使用python內建函式id()來獲取變數的位址

變數名:是乙個識別符號(dientify),用來代之一塊記憶體空間,使用這個變數名,我們可以很方便的操作這塊記憶體區域。

記憶體:記憶體是我們電腦硬體,用來存放資料,形象的理解就是記憶體有乙個乙個的小格仔組成,每個格仔的大小是乙個位元組,每個格仔可以存放乙個位元組大小的資料。我們如何才能知道,資料存放在哪些格仔中,那就得靠位址,位址類似於樓房的門牌號,是記憶體的識別符號。

==:判斷兩個量的「值」是否相同,缺省會呼叫物件的__eq__()方法。

基本語法:a == b

返回bool值,當a和b的值相同時,返回true,否則返回false。

基本語法:a is b(即判斷id(a)是否等於id(b))

返回bool值,當a和b的記憶體位址相同時,返回true,否則返回false。

如果a is b為true,那麼a==b必然也是true,因為同一塊位址肯定只能存乙個值;反過來則不成了,如果a==b為true,a is b不一定為true,因為相同的值可以儲存在不同的記憶體中。因此is判斷比==更嚴格。

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

>>>b = a

>>>print(a == b)

true

>>>print(a is b)

true

>>>print(id(a))

96345160

>>>print(id(b))

96345160

上例中,a = [1,2,3],首先開闢了一塊記憶體位址,並將該位址的值設定為[1,2,3],然後將變數(引用)a指向這塊記憶體。b=a則是將變數(引用)b也指向這塊記憶體位址(python決定了這種「變數之間的直接賦值方式」不會新開闢一塊記憶體),結果就是a和b指向相同的位址,當然值也相同。因此a is b 和a == b 的結果都是true。

例2:

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

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

>>>print(a == b)

true

>>>print(a is b)

false

>>>print(id(a))

96653000

>>>print(id(b))

96615176

例2僅僅是把b = a換成了b = [1,2,3],這兩者有本質的差異,後者重新開闢了一塊記憶體,並把他的值設定為[1,2,3],然後將b指向這塊記憶體。顯然a == b是true,因為值相同;而a is b為false,因為兩者指向了不同的記憶體位址。

python is和 的區別

在 python 中會用到物件之間比較,可以用 也可以用 is 但是它們的區別是什麼呢?is 比較的是兩個例項物件是不是完全相同,它們是不是同乙個物件,占用的記憶體位址是否相同。萊布尼茨說過 世界上沒有兩片完全相同的葉子 這個is正是這樣的比較,比較是不是同一片葉子 即比較的id是否相同,這id類似...

Python is 和 的區別

i1 205464113 i2 205464113 i3 i1 print id i1 print id i2 print id i3 print i1 is i2 print i1 i2 print i1 is i3 print i1 i3 print f1 1.574 f2 1.574 f3 f...

python is 和 的區別

python中的物件包含三百要素 id type value 其中id用來唯一標識乙個物件度,type標識物件的知型別,道value是物件的值內 is判斷的容是a物件是否就是b物件,是通過id來判斷的 判斷的是a物件的值是否和b物件的值相等,是通過value來判斷的 如下 或許可以幫助你理解。a 1...