中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

學習Python,is和==的本質區別你知道嗎?

發布時間:2020-07-16 19:27:08 來源:網絡 閱讀:272 作者:dlhongmeng 欄目:編程語言

在Python中,is和==都是用來對兩個對象進行比較判斷的,但兩者卻有本質的區別。

一:is操作符
is操作符是Python語言的一個內置操作符,它的作用是比較兩個變量是否指向同一塊內存區域,也就是判斷id(對象)是否相等。
當兩個變量是共享引用關系的話,它們指向的肯定是同一塊內存區域,用is判斷得到的結果肯定為True。

>>> a = 10
>>> b = a
>>> a is b
True

如果是下面的這種情況呢?

>>> a,b = 10,10
>>> a is b
True
>>> id(a), id(b)
(1794638576, 1794638576)
>>> a,b = "abc","abc"
>>> a is b
True
>>> id(a), id(b)
(2281621304632, 2281621304632)
>>> a = (1,2,3)
>>> b = (1,2,3)
>>> id(a), id(b)
(2281620654120, 2281620654264)
>>> a is b
False
>>> a[0] is b[0]
True
>>> id(a[0]), id(b[0])
(1794638288, 1794638288)

從以上例子可以看到,當對象是數值類型或者字符串時,當兩個對象的值相等時,它們用is判斷的結果就為True,這是因為它們的id是相等的,而元組類型卻不是。在Python中,對于小整數和字符串類型,在創建一個數據對象時,會優先使用緩存中的數據,如果緩存中存在,就會使用同一個數據,對于大整數、浮點數、元組、列表、字典、集合這些數據類型,會重新創建一塊內存用于存儲數據對象,但它們的元素如果是小整數或字符串時,也會優先使用緩存數據,這也就能解釋了上面的為什么a[0]和b[0]的id是一樣的。
在Python3.5.2下測試,我們發現,-5-256這些小數字Python會使用緩存進行存儲。
學習Python,is和==的本質區別你知道嗎?

二、==操作符
==操作符用來判斷兩個對象的數據是否相等,而不用關注它們的id是否一致,例如:

>>> a = 10
>>> b = 10.0
>>> a == b
True
>>> id(a), id(b)
(1794638576, 2281597561472)

當兩個類的實例進行比較時,如果實例的數據一致時也不一定相等,如下:

class TestEqual():
    def __init__(self, u, v): 
        self.u = u
        self.v = v

a = TestEqual(3, 4)
b = TestEqual(3, 4)
print(a == b)  # 輸出結果為False

為了讓類的實例可以進行==比較,需要重新實現eq函數。

class TestEqual():
    def __init__(self, u, v): 
        self.u = u
        self.v = v

    def __eq__(self, other):
        if self.u== other.u:
            return True
        else:
            return False

a = TestEqual(3, 4)
b = TestEqual(3, 5)
print(a == b)  # 輸出結果為True

從上面這個示例可以看出,在eq函數內部定義的邏輯是只要u相等了,兩個類的實例就可以判定為相等。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

井冈山市| 景泰县| 胶南市| 清远市| 鹤庆县| 神木县| 会泽县| 封丘县| 青浦区| 嵊泗县| 堆龙德庆县| 松阳县| 岗巴县| 保定市| 菏泽市| 抚宁县| 蕉岭县| 息烽县| 仲巴县| 敖汉旗| 杭锦后旗| 乡城县| 健康| 阿城市| 兰西县| 安国市| 榆林市| 万源市| 西峡县| 栖霞市| 集贤县| 手游| 佛山市| 天峨县| 咸丰县| 姜堰市| 昌黎县| 墨竹工卡县| 花垣县| 翼城县| 德安县|