لدي سؤال..
عند كتابة:
x = y = z = 1
هل كلاً من x, y , z يُشير إلى نفس الموقع في الذاكرة وهو القيمة 1 ؟ أم لكل متغير موقع خاص به يشير إليه ؟
عند كتابة:
x = y = z = 1
فإن جميع المتغيرات x وy وz ستشير إلى نفس المكان في الذاكرة، وهذا المكان يحمل القيمة 1. يعني ذلك أنهم جميعًا يشتركون في نفس المكان في الذاكرة وبالتالي يكون لديهم نفس القيمة 1. ولذلك لو حاولت طباعة أي منهم، سيكون الأمر ذاته:
x = y = z = 1 print(x) // 1 print(y) // 1 print(z) // 1
يدعى هذا السياق بالتعيين المتعدد (Multiple Assignment) أو التعيين المتتابع (Sequential Assignment). أين يتم تعيين نفس القيمة (1 في هذه الحالة) لعدة متغيرات في خط واحد، وهذه المتغيرات ستشير جميعها إلى نفس القيمة والمكان في الذاكرة.
يختلف ذلك على حسب لغة البرمجة حيث أن لكل لغة برمجة لها منطق وسلوك خاص بها لذلك ليس كل لغات البرمجة ينطبق عليها هذا المنطق.
ولكن بالنسبة ل python فإن كل من x, y, z سيشيرون إلى نفس الموقع في الذاكرة وهو القيمة 1. هذا لأن بايثون تستخدم المرجع (reference) لربط المتغيرات بالقيم. عندما تقوم بتعيين قيمة إلى متغير، فإنك تقوم بالفعل بتعيين عنوان الذاكرة الذي توجد فيه القيمة إلى المتغير.
في المثال ، يتم تعيين القيمة 1 إلى الذاكرة أولاً. ثم يتم تعيين كل من x, y, z إلى عنوان الذاكرة هذا. لذلك، عند الوصول إلى أي من هذه المتغيرات، يتم الوصول إلى نفس القيمة في الذاكرة.
يمكنك التحقق من هذا عن طريق استخدام دالة id(). هذه الدالة تعيد معرف المتغير، والذي هو عنوان الذاكرة الذي يشير إليه المتغير.
x = y = z = 1 print(id(x)) print(id(y)) print(id(z))
سيؤدي هذا إلى طباعة نفس العنوان
فإن كلاً من x, y, z سيشير إلى نفس الموقع في الذاكرة وهو القيمة 1.
وذلك لأن العبارة x = y = z = 1 هي عبارة تساوي قصيرة (short assignment statement) تُستخدم لتعيين نفس القيمة إلى متغيرات متعددة في نفس الوقت.
ففي لغة بايثون، يتم تخصيص الذاكرة للمتغيرات عند أول استخدام لها، أي يتم تخصيص الذاكرة للمتغيرات x, y, z مرة واحدة فقط عند أول استخدام لعبارة التساوي، ثم يتم تعيين القيمة 1 إلى هذا الموقع في الذاكرة.
لذلك، فإن كلاً من x, y, z سيشير إلى نفس الموقع في الذاكرة وهو القيمة 1.
ويمكن تمثيل ذلك ببيان الذاكرة التالي:
x | y | z 1 | 1 | 1
حيث أن القيمة 1 يتم تخزينها في الموقع 1 من الذاكرة، وجميع المتغيرات x, y, z تشير إلى هذا الموقع.
وفي لغة بايثون، تستطيع استخدام عبارة التساوي القصيرة لتعيين نفس القيمة إلى متغيرات متعددة في نفس الوقت، وذلك لتبسيط الكود وجعله أكثر قابلية للقراءة.
التعليقات