ما الفرق بين == و is
الفرق بين == و is
كل قيمة مخزنة في الذاكرة يكون لها معرف id يميزها، في بايثون القيم المتشابهة من نفس الكائن object يكون لها نفس المعرف id
is تقوم بمقارنة المعرفات ids للمتغيرات هل هي متساوية أم لا.
== تقوم بمقارنة القيم التي تحملها المتغيرات هل هي متساوية أم لا.
مثال:
a=10 b=10 if a is b: print('True',end='\n'); else: print('False',end='\n'); print(id(a), end='\n'); print(id(b));
هذا يعني أن عمل is يكون على النحول التالي:
id(a) == id(b)
مثال آخر عند تغيير نوع الكائن object يتغير المعرف id وعليه تكون المقارنة بـ is قيمتها خطأ False لأن المتغير a عبارة عن عدد صحيح والمتغير b عبارة عن عدد كسري كالتالي:
a=10 b=10.0 if a is b: print('True',end='\n'); else: print('False',end='\n'); print(id(a), end='\n'); print(id(b));
في حالة استخدام معامل المقارنة == في الكود السابق تكون قيمة المقارنة صحيحة True لأن المقارنة تتم على القيم:
a=10 b=10.0 if a == b: print('True',end='\n'); else: print('False',end='\n'); print(id(a), end='\n'); print(id(b));
لا تستخدم is في مقارنة القيم لأن بايثون لا تقوم بتخزين القيم الكبيرة في الذاكرة مباشراً ولهذا تعطيك نتائج خاطئة لنتائج من نفس الكائن كالتالي:
a=10**5 b=10**5 if a is b: print('True',end='\n'); else: print('False',end='\n'); print(id(a), end='\n'); print(id(b));
التعليقات