天天看點

python中雙等号與單等号的差別_python中is與雙等于号“==”的差別示例詳解

前言

在開始本文之前,首先要知道Python中對象包含的三個基本要素,分别是:id(身份辨別)、python type()(資料類型)和value(值)。is和==都是對對象進行比較判斷作用的,但對對象比較判斷的内容并不相同。下面來看看具體差別在哪。

發現問題

最近在給小夥伴寫段小代碼用于爬取一個GIS的各高層資料,python中使用了”is”來代替”==”,結果下載下傳至512的時候出了問題。

代碼如下

這是用來擷取下一個高層資料的URL的函數,結果第二天,小夥伴告訴我說下載下傳到x == 9, y == 0, z == 512的時候停止下載下傳了。

探索

首先,根據上述代碼可以知道,z按照邏輯是不可能等于512的,所有開始懷疑是不是這個函數有問題,但是這麼簡單的函數,怎麼看都不應該有問題啊。于是開始跟代碼,發現

處,x == 9, y == 0, z == 512時,if後面居然傳回的是False。我拿電腦算了好幾遍,确定自己不是在二次元後,開始懷疑is的問題。

結果

在StackOverflow上面找到了答案

is will return True if two variables point to the same object, == if the objects referred to by the variables are equal.

In your case, the second test only works because Python caches small integer objects, which is an implementation detail. For larger integers, this does not work:

然後自己寫了個小段子看看最大的可複用的int是多大

最後發現最大是256。

小結:

==比較操作符:用來比較兩個對象是否相等,value做為判斷因素;

is同一性運算符:比較判斷兩個對象是否相同,id做為判斷因素。

總結

以上就是這篇文章的全部内容了,希望本文的内容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對伺服器之家的支援。

原文連結:http://0xng.com/2017/11/21/python中is和雙等于号的差別/