الفرق بين == و 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));
    

ما كنت سأكتبه رأيتك قد كتبته.. شكراً جزيلاً لك