تعود وظيفة id() في Python بإرجاع “الهوية” الخاصة بالكائن. الهوية الخاصة بكائن هي عبارة عن عدد صحيح، والذي يضمن أن يكون فريدًا وثابتًا لهذا الكائن خلال فترة حياته. قد تحدث حالة حيث يكون لدى كائنين ذي أمد حياة غير تداخلية نفس قيمة id().
في تنفيذ CPython، يُفترض أن هذا الرقم هو عنوان الكائن في الذاكرة.
وظيفة id() في Python
تقوم Python بتخزين قيمة id() لأنواع البيانات المستخدمة بشكل شائع، مثل السلسلة، العدد الصحيح، التوابع، إلخ. لذلك قد تجد أن متغيرات متعددة تشير إلى نفس الكائن ولديها نفس قيمة id() إذا كانت قيمها متطابقة. لنتحقق من ذلك من خلال مثال.
# الأعداد الصحيحة
a = 10
b = 10
c = 11
d = 12
print(id(a))
print(id(b))
print(id(c))
print(id(d))
الناتج:
4317900064
4317900064
4317900096
4317900128
لاحظ أن قيمة id() لـ ‘a’ و ‘b’ هي نفسها، حيث يكون لديهم نفس قيمة العدد الصحيح. دعونا نتحقق من موضوع مماثل مع السلسلة والتوابع أيضًا؟
# tuples
t = ('A', 'B')
print(id(t))
t1 = ('A', 'B')
print(id(t1))
# strings
s1 = 'ABC'
s2 = 'ABC'
print(id(s1))
print(id(s2))
الناتج:
4320130056
4320130056
4320080816
4320080816
من الناتج، يظهر أن Python يقوم بتخزين السلاسل وكائنات الـ tuple واستخدامها لتوفير مساحة في الذاكرة.
يمكن أن يعمل التخزين المؤقت فقط مع الكائنات غير القابلة للتغيير، لاحظ أن الأعداد الصحيحة والسلاسل والتوابع هي غير قابلة للتغيير. لذلك يمكن لتنفيذ Python استخدام التخزين المؤقت لتوفير مساحة في الذاكرة وتحسين الأداء.
نحن نعلم أن القاموس ليس لا يتغير، دعونا نرى ما إذا كانت الدالة id() مختلفة للقواميس المختلفة حتى لو كانت العناصر متماثلة؟
# dict
d1 = {"A": 1, "B": 2}
d2 = {"A": 1, "B": 2}
print(id(d1))
print(id(d2))
الناتج:
4519884624
4519884768
كما توقعنا، كائنات القاموس تعيد قيمة مختلفة للدالة id() ويبدو أنه لا يوجد هنا أي تخزين مؤقت.
دالة id() في بايثون لكائن مخصص
لنرى مثالًا بسيطًا على الحصول على قيمة id() لكائن مخصص.
class Emp:
a = 0
e1 = Emp()
e2 = Emp()
print(id(e1))
print(id(e2))
الناتج:
4520251744
4520251856
الختام
قيمة دالة id() في بايثون مضمونة أن تكون فريدة وثابتة لكائن. يمكننا استخدام هذا للتحقق مما إذا كانت كائنين يشيران إلى نفس الكائن في الذاكرة أم لا.
يمكنك مراجعة البرنامج النصي الكامل للبايثون والمزيد من أمثلة بايثون من مستودعنا على GitHub.
المرجع: التوثيق الرسمي
Source:
https://www.digitalocean.com/community/tutorials/python-id