در Python، دو عملگر == و is پرسش یکسانی نمیپرسند. == بررسی میکند که آیا دو object مقدار یکسانی دارند؛ اما is برای بررسی Object Identity است: آیا هر دو واقعاً همان object در حافظه هستند؟
برای مثال، اگر a و b هرکدام جداگانه با مقدار [1, 2, 3] ساخته شوند، نتیجهٔ a == b برابر True است، چون مقدارشان یکسان است. در مقابل، a is b برابر False میشود، چون دو object جدا هستند. پس برابر بودن مقدار، به معنی یکی بودن خود object نیست.
نکتهای که ممکن است تازهکارها را گمراه کند، رفتار CPython است. این پیادهسازی Python برای عددهای صحیح کوچک و stringهای کوتاه از cache استفاده میکند. در نتیجه، مقایسه با is ممکن است در یک تست کوچک همان نتیجهای را بدهد که از مقایسهٔ مقدار انتظار میرود. همین موضوع میتواند اشتباه را پنهان کند و باعث شود کدی که در تست کار میکند، بعداً در محیط عملیاتی به مشکل بخورد.
قاعدهٔ پیشنهادی مطلب روشن است: برای مقایسهٔ مقدارها از == استفاده کن. is را برای None، True و False نگه دار، نه برای مقایسهٔ مقدار عددها یا متن. موفقیت یک تست کوچک، دلیل درستی استفاده از is بهجای == نیست.





