تكرار السؤال: …
الإجابة المختصرة
== يقارن القيم عبر __eq__، بينما is يتحقق من أن الاسمين يشيران إلى نفس الكائن في الذاكرة (نفس الهوية id).
الشرح
استخدم is مع الكائنات الفريدة (singletons) مثل None و True و False و sentinel objects، واستخدم == لمقارنة القيم. يخزن CPython مؤقتًا الأعداد الصغيرة (-5 إلى 256) وبعض النصوص (interning)، لذلك قد تعطي is نتيجة True بالصدفة لقيم متساوية؛ هذه تفاصيل تنفيذ وليست ضمانًا، وتطلق الإصدارات الحديثة تحذير SyntaxWarning عند مقارنة literal بـ is.
مثال بالكود
a = [1, 2]
b = [1, 2]
print(a == b) # True — نفس القيمة
print(a is b) # False — كائنان مختلفان
if value is None:
...أخطاء شائعة
- كتابة if x is 1000 أو if name is "admin" والاعتماد على caching غير مضمون.
- كتابة if x == None بدل if x is None.