
join בסוף, כך שנוצר רק התוצר הסופי.הטקסט המלא של הדקות הראשונות בהרצאה «Mutable - יתרונות וחסרונות» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, נעשה יותר לזה, נסביר על מיוטבל ואי-מיוטבל, היתרונות והחסרונות, ולמה בכלל יש לדבר הזה. אז בקצרה מאוד, מיוטבל ואי-מיוטבל מדבר על סיטואציה שבה יש לי משתנה ששווה לאיזשהו ערך, למשל a שווה ל-4 ו-b שווה גם ל-a, ואז מה קורה כשאני משנה את b,
כשאני עושה b שווה למשהו, האם זה משנה את a או לא משנה את a? למשל במקרה ש-a שווה 4 ו-b שווה ל-a ואז אני אגיד ש-b שווה ל-5 אז a ו-b ישמרו על ערכיהם המקוריים.
אני אדגים לכם את זה. print a is a. אני אריץ את הכובד הזה. אני רואה שכל אחד מהם שמר על הערך המקורי שלו ו-a ו-b הם בעצם לא אותו משתנה.
זה בעצם דבר שנקרא immutable. כלומר, מהרגע שהוא נוצר הוא לא יכול להשתנות. שווה ל-4 לפיכך A לא יכול להשתנות יותר אלא אם כן נעשה A שווה משהו אבל אי אפשר לשנות את A דרך B בפייתון גם אפשר לראות את זה דרך הפונקציה ID שהיא מדפיסה את המיקום בזיכרון של משתנה כפי שתוכלו
לראות שהיא תדפיס כתובות שונות כי מדובר פה באובייקטים שונים עכשיו לעומת זאת אם A היה שווה לליסט שבתוכו יש 4 בי שווה ל-a ונעשה ל-b פקודה append נראה מה קורה שימו לב שהכתובות הן זהות כלומר a שווה ל-b אבל דבר זה כמו שאני אחזור שוב לא יקרה אם a הוא יהיה שווה למספר אתם רואים המספרים הם שונים עכשיו למה יש לנו mutable וimmutable מה ההיגיון בזה בואו ננסה לחשוב
על היתרונות והחסרונות מבחינת יתרונות של immutable כלומר הקוד מבחינת יתרונות של מספרים אי-מיוטבל שהם משתנים והם לא משתנים מבחינת יתרונות של אי-מיוטבל מבחינת יתרונות של אי-מיוטבל רגע מבחינת יתרונות של אי-מיוטבל אז דבר ראשון הקוד הרבה יותר בריא ברגע שאני כותב שa שווה משהו זה לא משנה אם b גם שווה
לa אם c שווה לa אם אני שולח את a לפונקציה כל זה לא משנה הערך של a יישאר תמיד אותו ערך עד שאני אכתוב במקום אחר בקוד שלי A שווה למשהו אחר, כלומר הקוד הופך להיות הרבה יותר קווי, יתרון נוסף זה מה קורה שיש לנו שני threadים שמשתמשים באותו אובייקט, במקרה זה אם יש לי משתנה שהוא immutable בפונקציה שהthreadים משתמשים בו כל אחד מהם ישמור על
עותק עצמאי שלו וברגע שכל אחד מהם יעשה A שווה למשהו זה לא משנה אם שניהם רצים על אותה פונקציה מדובר על זיכרון שונה ובעצם לא ישנו אחד לשני את הדברים אולי אני אעשה דוגמה לזה, נראה דוגמה לזה עוד רגע.
מדובר בגלל שבעצם אנחנו חוסכים הרבה בעיות בזה שהמידע הוא נשאר אותו דבר לאורך כל הדרך, וחוסכים מנעולים וחוסכים בעיות בקוד. בעיה נוספת שאנחנו חוסכים ב-immutable זה מה שקורה שהמידע הוא משותף ויש לו רפרנסים שונים.
למשל, אם ניקח למשל דיקשנרי, דיקשנרי משתמש, הוא מבנה נתונים מסוג key value, כלומר יש לו איזשהו key שהוא מצביע על הvalue שלו.
כלומר, אם יש לי איזשהו דיקשנרי שבתוכו יש לי איזשהו סטרינג, למשל הסטרינג a והוא מצביע על איזשהו value, למשל עוד סטרינג, זה לא באמת משנה.
עכשיו הסטרינג a כשאני עושה d שווה לa שאני עושה d, אני אעשה ככה, אני אגיד k שווה ל-a. ואז אני כותב, שזה בעצם אותו דבר אם אפשר לומר, יש לי key, שהערך שלו הוא איזשהו סטרינג, ואז אני אומר בעצם לפייתון, תיצור לי dictionary שהסטרינג שלו הוא key, והוא מצביע על איזשהו ערך.
אז פייתון שומר את key בצד, והוא יודע שהוא מצביע על הדבר הזה. אם לאחר מכן בקוד שלי אני אכתוב k שווה ל-5, קי שבעצם נמצא בדיקשנרי שלי הוא קי אחר הוא אותו קי של a בוא נוסיף דוגמא בוא נוסיף הדפסה ונבחר בכך פרינט d תשימו לב שקי בתוך הדיקשנרי הוא עדיין a הסיבה לכך היא שהוא אימיוטבל וקי פה הוא לא הקי
שנמצא פה קי הזה הוא נוצר מחדש כי אימיוטבל לא ניתן לשינוי עכשיו, במקרה ו-Key הוא היה אובייקט שהיה ניתן לשינוי, בעצם ה-Dictionary היה מושחת.
למה הוא היה מושחת? היה לנו Corruption של ה-Dictionary. מה שהיה קורה, פייתון היה בטוח שה-Key שלו שווה ל-Tab A. הוא היה מאחסן אותו במקום הנכון, ואנחנו היינו משנים את הערך שלו בעצם מתחת לרגליים של ה-Dictionary, וזה היה גורם ל-Dictionary לשמור מידע לא במקום של הערך A.
כלומר לא במקום של הערך 5 שהוא הערך החדש אלא במקום של הערך A. כלומר במקום שהדיקשנרי ידע שהוא מחזיק בתוכו A וישמור אותו במקום של A, הוא יחשוב שיש בתוכו A, יחזיק אותו בערך A, אבל מה שיש לו בפועל זה את הערך 5 וזה בעצם גורם ל-corruption של הדיקשנרי וגורם לו לא לתפקד, זה יגרום לו להרס של המידע.
אז עד עכשיו דיברנו על חסרונות, על היתרונות של immutable. בואו נדבר רגע על היתרונות של מיוטבל אז מבחינת יתרונות של מיוטבל אז דבר ראשון מבחינת יעילות מדובר במשהו הרבה יותר טוב למה? זה מאוד פשוט מבחינת פרפורמנס של ההעתקות הרי מה שקורה בתוך הפייתון משין
בואו נגיד שיש לי משהו קצת יותר מסובך נגיד יש לי איזשהו סטרינג s