3.3 مراجعة المُتغيِّرات
أهداف التعلم
في نهاية هذا القسم، ينبغي أن تكون قادرًا على:
- التمييز بين المُتغيِّرات، والكائنات، والمراجع.
- رسم مخططات الذاكرة باستخدام الأعداد الصحيحة، والأعداد العشرية، والسلاسل النصية.
المراجع إلى الكائنات
في Python، يشير كل مُتغيِّر إلى كائن. تعليمة الإسناد message = "Hello" تجعل المُتغيِّر message يشير إلى الكائن "Hello". قد تشير مُتغيِّرات متعددة إلى الكائن نفسه. مثال: greeting = message تجعل greeting يشير إلى الكائن نفسه الذي يشير إليه message. يُظهر مخطط الذاكرة العلاقة بين المُتغيِّرات والكائنات.
مفاهيم تطبيقية
المُتغيِّرات والكائنات
استكشاف إضافي
Python Tutor أداة مجانية عبر الإنترنت لتمثيل تنفيذ الشِفرة بصريًّا. يمكن للمستخدم إدخال أي شِفرة Python، والنقر على Visualize Execution (تصوير التنفيذ)، ثم النقر على زر Next (التالي) لتشغيل الشِفرة سطرًا بسطر. إليك مثال التقييم والنتيجة من الرسوم المتحركة أعلاه.
Python Tutor مفيدة أيضًا لرسم مخططات الذاكرة المشابهة لتلك الموجودة في هذا الكتاب. قبل النقر على Visualize Execution (تصوير التنفيذ)، غيّر الخيار الأوسط من "inline primitives, don't nest objects [default]" إلى "render all objects on the heap (Python/Java)" كما هو موضح في لقطة الشاشة التالية:
خصائص الكائنات
لكل كائن هُوِيَّة ونوع وقيمة:
هُوِيَّة الكائن هي عدد صحيح فريد مرتبط بالكائن. وعادةً ما يشير هذا العدد الصحيح إلى موقع الكائن في الذاكرة. بمجرد إنشائه، لا تتغير هُوِيَّة الكائن أبدًا. الدالّة المُضمَّنة
id()تُرجع هُوِيَّة الكائن.يحدد نوع الكائن القيم والعمليات الممكنة للكائن. مثال: يمكن "قسمة" الأعداد الصحيحة والأعداد العشرية باستخدام العامل
/، لكن السلاسل النصية لا يمكن ذلك. الدالّة المُضمَّنةtype()تُرجع نوع الكائن.قيمة الكائن تمثل حالته الحالية. العديد من الكائنات، مثل الأعداد والسلاسل النصية، لا يمكن تعديلها بمجرد إنشائها. بعض الكائنات، مثل القوائم (list) (التي سيتم تقديمها لاحقًا)، مصممة لتكون قابلة للتعديل.
مفاهيم تطبيقية
الدالتان id() و type()
استكشاف إضافي
كما هو موضح في مخطط الذاكرة، المُتغيِّرات والكائنات هما فكرتان منفصلتان. استدعاء دالّة مثل id() أو type() يُرجع معلومات حول كائن، وليس مُتغيِّرًا. في الواقع، لا يمتلك المُتغيِّر هُوِيَّة أو نوعًا، كما هو موضح في هذا المثال:
>>> rating = 10 # كائن عدد صحيح في مكان ما في الذاكرة.
>>> type(rating)
<class 'int'>
>>> id(rating)
9793344
>>> rating = "ten" # كائن سلسلة نصية في مكان آخر في الذاكرة.
>>> type(rating)
<class 'str'>
>>> id(rating)
140690967388272
قد يُظَنّ خطأً أن نوع المُتغيِّر rating أو هُوِيَّته يتغيران. غير أن ما يتغير هو الكائن الذي يشير إليه المُتغيِّر rating.
جرّب بنفسك
ثلاثة مُتغيِّرات
- ارسم مخطط ذاكرة للشِفرة التالية:
a = 1 b = 2 c = b b = a a = c - شغّل الشِفرة على Python Tutor للتحقق من إجابتك.
- بناءً على مخططك، أجب عن هذه الأسئلة:
- ما هي القيمة النهائية لـ
a،b، وc؟ - كم عدد كائنات الأعداد الصحيحة التي تم إنشاؤها؟
- ما هي القيمة النهائية لـ
جرّب بنفسك
أنواع مختلفة
- ارسم مخطط ذاكرة للشِفرة التالية:
name = "Chocolate" length = len(name) price = 1.99 lower = min(length, price) product = name name = name * 2 - شغّل الشِفرة على Python Tutor للتحقق من إجابتك.
- بناءً على مخططك، أجب عن هذه الأسئلة:
- ما هو نوع وقيمة كل كائن؟
- إلى أي كائن يشير كل مُتغيِّر؟