פייתון/פייתון גרסה 3/העתקים: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Mathreturn (שיחה | תרומות)
אין תקציר עריכה
Mathreturn (שיחה | תרומות)
אין תקציר עריכה
שורה 1:
'''העתקים''' היא פעולה שמייצרת העתקה של טיפוסים. קיימים שני סוגים של העתקים:
משתנה הוא נעלם. מבחינה זו הוא אינו מחזיק בערך אלא מפנה אל כתובת בה קיים ערך. באופן דומה פרטים של רשימה הם בעלי כתובת זכרון שמפנים אל כתובת של ערך.
 
קיימים שני סוגים של ערכים:
#העתק עמוק (deep copy) - למשתנה המועתק יש '''מיקום''' זיכרון משל עצמו. שינויים שבוצעו על המשתנה לא ישפיעו על המקור.
#העתק רדוד (shadow copy)- המשתנה החדש מאוחסן"מצביע" באותואל אותו תא זכרוןזיכרון של המשתנה המקורי ועל כן שינוים במשתנה החדש ישפיעו על המשתנה המקורי.
 
* בכדי לדעת האם מדובר בהעתק עמוק או רדוד נעזר בפונקציית id שמחזירה את "מקום הזיכרון".
 
'''פקודת השמה''' היא דוגמה להעתק רדוד. העותק החדש של המשתנה מצביע בדיוק על אותו מקום בזיכרון :
<source lang = "python">
a=[1,2,3]
x=a
print(id(x))
print(id(a))
x.append(4)
print(a)
>>>2414993751560
>>>2414993751560
>>>[1, 2, 3, 4]
</source>
 
לעומת זאת הצהרה מייצרת בדיוק את אותו רשימה אך היא נשמרת במקום חדש:
<source lang = "python">
x=[1,2,3]
y=x[:]
print(id(x))
print(id(y))
y.append(1)
print(x)
print(y)
 
>>>2123513615304
>>>2123477079176
>>>[1, 2, 3]
>>>[1, 2, 3, 1]
</source>
 
חשוב לזכור כי טיפוסים בעצמם אינם מחזקים תווים או ערכים אלא הם מצביעים אל כתובת זיכרון עם ערך.
בכדי לדעת האם מדובר בהעתק עמוק או רדוד נעזר בפונקציית id שמחזירה את "מקום הזיכרון".
 
מבחינת משתנים: השמה שומרת על כתובת המשתנה לעומת הצהרה המייצרת משתנה חדש בעל אותו העתק.
 
נעזר בדוגמה שגם ממחישה את ההבדלים בין ==אופרטור <code> == </code> לעומת <code> is </code> ==
 
<source lang = "python">