Bildiyiniz kimi, qiymət və dəyişənlərin bərabər olub-olmadığını yoxlamaq üçün bərabərlik (== və !=) operatorlarından istifadə olunur. Bundan başqa Python dilində obyektlərin identikliyini yoxlayan identiklik (is və is not) operatorları da nəzərdə tutulmuşdur. Burada xüsusilə qeyd etmək lazımdır ki, bu iki anlayış (bərabərlik və identiklik) bir-birindən ciddi mənada fərqlənir.
Gəlin aşağıdakı misalları nəzərdən keçirək:
>>> L1 = [1, 2, 3] >>> L2 = [1, 2, 3] >>> L3 = L1 >>> L1 == L2 True >>> L1 is L2 False >>> L1 is L3 True >>> L2 is not L3 True >>>
Yuxarıdakı proqramda L1, L2 və L3 dəyişənlərinə siyahı (list) tipində qiymətlər mənimsədilir. Burada L1 və L2 dəyişənləri eyni məzmunda olan, lakin fərqli siyahılara istinad edirlər. Başqa sözlə desək, istinad edilən siyahılar ayrı-ayrı obyektlərdir və yaddaşın müxtəlif ünvanlarında yerləşirlər. Və məhz buna görə də, onlar bərabər olsa da identik sayılmırlar. Proqramda həm də L3 dəyişəninə L1 siyahısı mənimsədilir. Bu zaman L3 dəyişəni də L1 dəyişəninin istinad etdiyi eyni obyektə istinad edəcək. Bu isə onların identik olması mənasına gələcək. Və sonda L2 və L3 siyahılarının da identik olmadığı göstərilir.
Daha bir neçə misalı nəzərdən keçirək:
>>> a = 123 >>> b = 123 >>> s1 = 'salam' >>> s2 = 'salam' >>> a is b True >>> s1 is s2 True >>>
Bu proqramda biz a və b dəyişənlərinə tam ədəd tipində 123 qiymətini, s1 və s2 dəyişənlərinə də sətir tipində ‘salam’ qiymətini mənimsətdik. Məntiqlə a və b, eləcə də s1 və s2 fərqli obyektlərə istinad etdiklərinə görə öz aralarında identik olmamalı idilər. Lakin bu dəyişənlərə identiklik operatorunu tətbiq etdiyimiz zaman bunun əksini görürük. Əcəba niyə? Məsələ burasındadır ki, fərqli dəyişənlərə eyni kiçik ədədləri və qısa sətirləri mənimsətdiyimiz zaman Python dilinin interpretatoru optimallaşdırma məqsədilə keşləmə həyata keçirir və bu dəyişənləri eyni obyektə bağlayır. Lakin əgər daha böyük ədədlər və daha uzun sətirlər istifadə olunarsa, bu zaman vəziyyət dəyişər və dəyişənlər fərqli obyektlərə istinad etmiş olar:
>>> a = 12345 >>> b = 12345 >>> a is b False >>> s1= 'salam dostlar' >>> s2= 'salam dostlar' >>> s1 is s2 False >>>
Proqramdan da gördüyünüz kimi a və b, eləcə də s1 və s2 dəyişənləri artıq öz aralarında identik deyillər.