بايثونالعوامل التي تستخدم لمعرفة ما إذا كان الكائنين يشيران لكائن واحد في الذاكرة أم لا
- طريقة معرفة عنوان المتغير أو الكائن في الذاكرة
- العامل
is
(Is Operator) - العامل
is not
(Is Not Operator)
طريقة معرفة عنوان المتغير أو الكائن في الذاكرة
لمعرفة المكان أو العنوان المحجوز في الذاكرة لأي شيء تم تعريفه يمكنك إستخدام الدالة id()
.
بكل بساطة قم بوضع إسم أي متغير أو كائن بداخلها و سترجع لك عدد صحيح يمثل عنوانه في الذاكرة.
المثال الأول
# هنا قمنا بتعريف متغيران عندهم قيم مختلفة x = 3 y = 7 # هنا قمنا بطباعة عناوينهم في الذاكرة print('x address is:', id(x)) print('y address is:', id(y))
النتيجة
y address is: 1537266832
نلاحظ أن عنوان المتغير x
مختلف عن عنوان المتغير y
و بالتالي هذا يعني أنه تم حجز مساحة خاصة لكل واحد منهما و أنهما يشيران لمكانين مختلفين في الذاكرة.
في حال قمت بتعريف متغيران أو أكثر و أعطيتهم نفس القيمة، فإن مفسّر لغة بايثون سيحجز مكان واحد لهم و يضع فيه القيمة حتى يوّفر في استهلاك مساحة الذاكرة.
المثال الثاني
# هنا قمنا بتعريف متغيران عندهم قيم مختلفة x = 5 y = 5 # هنا قمنا بطباعة عناوينهم في الذاكرة print('x address is:', id(x)) print('y address is:', id(y))
النتيجة
y address is: 1833030700
نلاحظ أن عنوان المتغير x
هو نفسه عن عنوان المتغير y
و بالتالي هذا يعني أنه تم حجز مساحة واحدة لكلا المتغيرين و أنهما يشيران إلى نفس المكان في الذاكرة.
العامل is
(Is Operator)
العامل is
يستخدم لمعرفة ما إذا كان الكائنين يشيران لكائن واحد في الذاكرة أم لا.
- إذا كانا يشيران لنفس الكائن فإنه يرجع الجواب
True
. - إذا كانا لا يشيران لنفس الكائن فإنه يرجع الجواب
False
.
مثال
# هنا قمنا بتعريف مصفوفتين عندهما نفس الحجم و وضعنا فيهما نفس القيم A = [1, 2, 3] B = [1, 2, 3] # في الذاكرة B و A هنا قمنا بطباعة عنوان المصفوفتان print('A address is:', id(A)) print('B address is:', id(B)) # يشيران لكائن واحد في الذاكرة ( أي لعنوان واحد ) سيتم تنفيذ أمر الطباعة B و A إذا كان if A is B: print('A and B have the same ID')
النتيجة
B address is: 36563624
نلاحظ أن عنوان المصفوفة A
مختلف عن عنوان المصفوفة B
و بالتالي فهذا يعني أنهما لا يشيران لمكان واحد في الذاكرة.
لهذا السبب لم يتم تنفيذ أمر الطباعة الأخير الموضوع داخل الشرط و الذي كان سيتنفذ في حال كان A
و B
يشيران لنفس المصفوفة في الذاكرة.
العامل is not
(Is Not Operator)
العامل is not
يستخدم لمعرفة ما إذا كان الكائنين لا يشيران لكائن واحد في الذاكرة أم لا.
- إذا كانا لا يشيران لنفس الكائن فإنه يرجع الجواب
True
. - إذا كانا يشيران لنفس الكائن فإنه يرجع الجواب
False
.
مثال
# هنا قمنا بتعريف مصفوفتين عندهما نفس الحجم و وضعنا فيهما نفس القيم A = [1, 2, 3] B = [1, 2, 3] # في الذاكرة B و A هنا قمنا بطباعة عنوان المصفوفتان print('A address is:', id(A)) print('B address is:', id(B)) # لا يشيران لكائن واحد في الذاكرة ( أي لعنوان واحد ) سيتم تنفيذ أمر الطباعة B و A إذا كان if A is not B: print('A and B have different IDs')
النتيجة
B address is: 5892776
A and B have different IDs
نلاحظ أن عنوان المصفوفة A
مختلف عن عنوان المصفوفة B
و بالتالي فهذا يعني أنهما لا يشيران لمكان واحد في الذاكرة.
لهذا السبب تم تنفيذ أمر الطباعة الأخير الموضوع داخل الشرط.