**"المتغيرات غير القابلة للتغيير (Immutable) مقابل المتغيرات القابلة للتغيير (Mutable) في بايثون"**

“المتغيرات غير القابلة للتغيير (Immutable) مقابل المتغيرات القابلة للتغيير (Mutable) في بايثون”

مقدمة

عند البرمجة بلغة بايثون، ستصادف مفهومين أساسيين قد يسببان الارتباك للمبتدئين: المتغيرات القابلة للتغيير (Mutable) والمتغيرات غير القابلة للتغيير (Immutable). فهم هذه الفكرة مهم جدًا لتجنب الأخطاء البرمجية الشائعة، خاصة عند التعامل مع القوائم (Lists) والقواميس (Dictionaries).

ما المقصود بـ Mutable و Immutable؟

  • المتغيرات القابلة للتغيير (Mutable): هي المتغيرات التي يمكن تعديل قيمتها بعد إنشائها، مثل القوائم (Lists) والقواميس (Dictionaries).
  • المتغيرات غير القابلة للتغيير (Immutable): هي المتغيرات التي لا يمكن تعديل قيمتها بعد إنشائها، مثل السلاسل النصية (Strings) والصفوف (Tuples).

مثال عملي على Mutable و Immutable

المتغيرات غير القابلة للتغيير (Immutable)

x = "Hello"
print(id(x))  # طباعة عنوان الذاكرة للكائن x
x += " World"
print(id(x))  # طباعة عنوان الذاكرة بعد التعديل

الملاحظة: هنا نلاحظ أن x بعد التعديل أصبحت تشير إلى كائن جديد في الذاكرة، لأن السلاسل النصية غير قابلة للتغيير في بايثون.

المتغيرات القابلة للتغيير (Mutable)

y = [1, 2, 3]
print(id(y))  # طباعة عنوان الذاكرة للكائن y
y.append(4)
print(id(y))  # طباعة عنوان الذاكرة بعد التعديل

الملاحظة: هنا نرى أن القائمة y احتفظت بنفس عنوان الذاكرة بعد التعديل، مما يعني أنها لم تُنشئ كائنًا جديدًا، بل تم تعديل نفس الكائن في مكانه.

الجدل في استخدام Mutable و Immutable

  1. الأداء:

    • استخدام المتغيرات غير القابلة للتغيير قد يكون أكثر كفاءة في بعض الحالات لأنه يسهل التخزين المؤقت (Caching) ويمنع التعديلات غير المقصودة.
    • لكن في المقابل، المتغيرات القابلة للتغيير تتيح تعديل البيانات دون الحاجة لإنشاء كائن جديد، مما قد يكون أسرع في بعض السيناريوهات.
  2. الأمان والموثوقية:

    • عند استخدام المتغيرات القابلة للتغيير في الدوال، يمكن أن تؤدي إلى تأثيرات جانبية غير متوقعة (Side Effects).
    • بينما المتغيرات غير القابلة للتغيير تساعد في منع الأخطاء وتجعل الكود أكثر وضوحًا.
  3. التعامل مع القوائم كمعاملات في الدوال:

    def modify_list(lst):
        lst.append(99)
    
    my_list = [1, 2, 3]
    modify_list(my_list)
    print(my_list)  # [1, 2, 3, 99]
    

    هنا، تم تعديل القائمة الأصلية، مما قد يكون غير متوقع للمبرمجين الجدد!

خاتمة

المتغيرات القابلة للتغيير وغير القابلة للتغيير كلاهما مهمان في بايثون، ويعتمد اختيار أحدهما على متطلبات البرنامج و مدى الحاجة إلى الكفاءة مقابل الأمان. لذلك، من المهم أن يكون لديك فهم واضح لكيفية عملهما لتجنب المشاكل الشائعة في البرمجة.

:small_blue_diamond: ما رأيك؟ أيهما تفضل: المتغيرات القابلة للتغيير أم غير القابلة للتغيير؟ ولماذا؟

7 إعجابات

بالتاكيد المتغيرات القابلة للتغيير :+1:

إعجابَين (2)

السلام عليكم ورحمة الله كيف حالك اخي الكريم badr_den عندي سؤال لك لعلي اجد منك الاجابة المفيدة السؤال كالتالي :عندما تحل مسألة او مشروع كبير وصعب او متوسط في الصعوبة بأي لغة وتجد صعوبة في الحل وبعدين تحل المشروع ولكن ببعض النقص والاخطاء وبعدها تشوف الحل الاحترافي الدقيق وتتعلم منه وترجع تكتب المشروع ثانيةً كتقوية للمنطق، ولكن السؤال هو لماذا بعد مرور شهر من حل المشروع لاتسطيع حله بشكل احترافي كما رأيت، وتكون كأنك اول مرة تقابل هذه المسألة اريد منك الاجابة على السؤال بناءً على تجربتك وشكراً لك

إعجابَين (2)

وعليكم السلام ورحمة الله وبركاته، أهلاً بيك أخي الكريم. :blush:

بص يا صاحبي، اللي بيحصل معاك ده طبيعي جدًا وبيحصل مع ناس كتير، والسبب الأساسي هو “منحنى النسيان” (Forgetting Curve) اللي اكتشفه عالم اسمه “إبنجهاوس”. ببساطة، أي معلومة جديدة بنتعلمها بنبدأ ننسى جزء منها مع مرور الوقت لو ما استخدمناهاش أو راجعناها بشكل منتظم.

ليه بعد شهر بتحس إنك أول مرة تشوف المشروع؟

  1. عدم التكرار والممارسة :man_lifting_weights:
    لو انت بعد ما حليت المشروع وشفت الحل الاحترافي ما راجعتش عليه أو ما طبقتش أفكاره في مشاريع تانية، عقلك هيبدأ ينسى التفاصيل مع الوقت، وهترجع لنقطة الصفر.

  2. الفهم العميق vs. الحفظ المؤقت :brain:
    ممكن تكون فهمت الحل الاحترافي وقتها، لكن لو ما عمّقتش فهمك وطبقت نفس الأفكار في سياقات مختلفة، هتلاقي نفسك بتنسى بسرعة. الحل هنا إنك بدل ما تحفظ الكود أو الطريقة، حاول تفهم ليه الطريقة دي اتبعت مش مجرد إزاي تتكتب.

  3. غياب التحديات المستمرة :dart:
    المهارات البرمجية زي العضلات، لو ما استخدمتهاش، هتضعف. لو بعد ما حليت المشروع ما حاولتش تعمل حاجة مشابهة أو أصعب منه، هتلاقي نفسك بتنسى الخطوات والتكنيكات اللي استخدمتها.

إزاي تتجنب المشكلة دي؟

:white_check_mark: المراجعة النشطة: بعد ما تحل مشروع، ارجع له بعد أسبوع، وبعد أسبوعين، وبعد شهر، وحاول تحله تاني بدون ما تبص على الحل.
:white_check_mark: التطبيق في سياقات مختلفة: خد نفس المفاهيم اللي تعلمتها وطبّقها في مشاريع تانية.
:white_check_mark: كتابة ملخصات وشروحات لنفسك: اكتب ملاحظات عن الأخطاء اللي وقعت فيها وإزاي حليتها.
:white_check_mark: التدريب المستمر: حتى لو المشروع خلص، حاول تشتغل على تحديات مشابهة عشان تثبت المعلومات في دماغك.

باختصار، النسيان شيء طبيعي، والحل هو إنك تراجع وتطبق بشكل مستمر، ووقتها هتلاقي إنك بتبني خبرة حقيقية مش مجرد حفظ مؤقت. :muscle::smiley:

إعجابَين (2)

شكراً لك جزيل الشكر اخي الكريم

إعجابَين (2)

ولكن اخي الكريم من اين تحصل على المشاريع والمسائل البرمجية لتطوير مهارات حل المشاكل، انا سمعت عن مواقع وغيرها وبحثت في النت ولكنني سأستغرق وقت حتى اعرف ماهي الافضل، هل تعرف مواقع لحل المسائل تنصحني بها وانت مجربها وشكراً لك.

3 إعجابات