Lecture 10 Memory in Python
Announcements For This Lecture Assignment 1 More Assignments • Assignment 2 TONIGHT • Work on your revisions § Scan and submit online § Read feedback carefully § Upload before midnight § Want done by tomorrow § Late: -10% per day § Partial credit after Wed. § No lates after Thursday • Survey : 660 responded • Assignment 3 is posted § Deadline is tomorrow § Due week from Friday § Avg Time : 6.8 hours! § Before you go on Fall Break § STD Dev : 3.9 hours § Graded when you get back 9/25/18 Memory in Python 2
Modeling Storage in Python • Global Space Global Space § What you “start with” p id2 § Stores global variables Call Frame § Also modules & functions! § Lasts until you quit Python incr_x • Call Frame q id2 § Variables in function call § Deleted when call done Heap Space id2 • Heap Space Point3 § Where “folders” are stored x y x 1.0 2.0 3.0 § Have to access indirectly 9/25/18 Memory in Python 3
Memory and the Python Tutor Heap Space Global Space Call Frame 9/25/18 Memory in Python 4
Functions and Global Space • A function definition… def to_centigrade(x): Body § Creates a global variable return 5*(x-32)/9.0 (same name as function) Global Space § Creates a folder for body to_centigrade id6 § Puts folder id in variable • Variable vs. Call Heap Space >>> to_centigrade id6 <fun to_centigrade at 0x100498de8> function >>> to_centigrade (32) Body 0.0 9/25/18 Memory in Python 5
Modules and Global Space import math • Importing a module: § Creates a global variable Global Space (same name as module) math id5 Heap Space § Puts contents in a folder id5 • Module variables module • Module functions 3.141592 pi § Puts folder id in variable 2.718281 e • from keyword dumps functions contents to global space 9/25/18 Memory in Python 6
Modules vs Objects Module Object math id2 p id3 id2 id3 module Point3 5.0 x 3.141592 pi 2.0 y 2.718281 e 3.0 z functions 9/25/18 Memory in Python 7
Modules vs Objects Module Object math id2 p id3 id2 id3 module Point3 5.0 x 3.141592 pi 2.0 y 2.718281 e 3.0 z math.pi p.x functions math.cos(1) p.clamp(-1,1) 9/25/18 Memory in Python 8
Modules vs Objects Module Object math id2 p id3 id2 id3 The period (.) means module Point3 “go inside of the folder” 5.0 x 3.141592 pi 2.0 y 2.718281 e 3.0 z math.pi p.x functions math.cos(1) p.clamp(-1,1) 9/25/18 Memory in Python 9
Recall: Call Frames Call : to_centigrade(50.0) 1. Draw a frame for the call 2. Assign the argument value to_centigrade 1 to the parameter (in frame) 3. Execute the function body x 50.0 § Look for variables in the frame § If not there, look for global variables with that name 4. Erase the frame for the call What is happening here? def to_centigrade(x): return 5*(x-32)/9.0 Only at the End! 1 9/25/18 Memory in Python 10
Recall: Call Frames Call : to_centigrade(50.0) 1. Draw a frame for the call 2. Assign the argument value to_centigrade to the parameter (in frame) 3. Execute the function body x 50.0 § Look for variables in the frame § If not there, look for global RETURN 10.0 variables with that name 4. Erase the frame for the call def to_centigrade(x): return 5*(x-32)/9.0 1 9/25/18 Memory in Python 11
Recall: Call Frames Call : to_centigrade(50.0) 1. Draw a frame for the call 2. Assign the argument value ERASE WHOLE FRAME to the parameter (in frame) 3. Execute the function body § Look for variables in the frame § If not there, look for global variables with that name 4. Erase the frame for the call def to_centigrade(x): But don’t actually return 5*(x-32)/9.0 1 erase on an exam 9/25/18 Memory in Python 12
Aside: What Happens Each Frame Step? • The instruction counter always changes • The contents only change if § You add a new variable § You change an existing variable § You delete a variable • If a variable refers to a mutable object § The contents of the folder might change 9/25/18 Memory in Python 13
Function Access to Global Space • All function definitions Global Space a 4 (for globals.py) are in some module • Call can access global show_a 1 space for that module § math.cos : global for math § temperature.to_centigrade # globals.py uses global for temperature """Show how globals work""" • But cannot change values a = 4 # global space § Assignment to a global makes a new local variable! def show_a(): § Why we limit to constants print(a) # shows global 9/25/18 Memory in Python 14
Function Access to Global Space • All function definitions Global Space a 4 (for globals.py) are in some module • Call can access global change_a space for that module § math.cos : global for math a 3.5 § temperature.to_centigrade # globals.py uses global for temperature """Show how globals work""" • But cannot change values a = 4 # global space § Assignment to a global makes a new local variable! def change_a(): § Why we limit to constants a = 3.5 # local variable 9/25/18 Memory in Python 15
Call Frames and Objects Global Space • Mutable objects can be p altered in a function call id5 § Object vars hold names! Heap Space § Folder accessed by both id5 global var & parameter Point3 • Example : x 0.0 def incr_x(q): … q.x = q.x + 1 Call Frame 1 incr_x 1 >>> p = Point3(0,0,0) q id5 >>> incr_x(p) 9/25/18 Memory in Python 16
Call Frames and Objects Global Space • Mutable objects can be p altered in a function call id5 § Object vars hold names! Heap Space § Folder accessed by both id5 global var & parameter Point3 • Example : x 1.0 x 0.0 def incr_x(q): … q.x = q.x + 1 Call Frame 1 incr_x >>> p = Point3(0,0,0) q id5 >>> incr_x(p) 9/25/18 Memory in Python 17
Call Frames and Objects Global Space • Mutable objects can be p altered in a function call id5 § Object vars hold names! Heap Space § Folder accessed by both id5 global var & parameter Point3 • Example : x 1.0 x 0.0 def incr_x(q): … q.x = q.x + 1 Call Frame 1 ERASE FRAME >>> p = Point3(0,0,0) >>> incr_x(p) 9/25/18 Memory in Python 18
Frames and Helper Functions def last_name_first(s): Call: last_name_first('Walker White'): """ Precondition : s in the form last_name_first 1 <first-name> <last-name>""" s 'Walker White' first = first_name(s) 1 last = last_name(s) 2 return last + ',' + first 3 def first_name(s): """ Prec : see last_name_first""" end = s.find(' ') 1 return s[0:end] 2 9/25/18 Memory in Python 19
Frames and Helper Functions Not done. Do not erase! def last_name_first(s): Call: last_name_first('Walker White'): """ Precondition : s in the form last_name_first 1 <first-name> <last-name>""" s 'Walker White' first = first_name(s) 1 last = last_name(s) 2 return last + ',' + first 3 first_name 1 def first_name(s): s 'Walker White' """ Prec : see last_name_first""" end = s.find(' ') 1 return s[0:end] 2 9/25/18 Memory in Python 20
Frames and Helper Functions def last_name_first(s): Call: last_name_first('Walker White'): """ Precondition : s in the form last_name_first 1 <first-name> <last-name>""" s 'Walker White' first = first_name(s) 1 last = last_name(s) 2 return last + ',' + first 3 first_name 2 def first_name(s): s 'Walker White' """ Prec : see last_name_first""" end = s.find(' ') end 6 1 return s[0:end] 2 9/25/18 Memory in Python 21
Frames and Helper Functions def last_name_first(s): Call: last_name_first('Walker White'): """ Precondition : s in the form last_name_first 1 <first-name> <last-name>""" s 'Walker White' first = first_name(s) 1 last = last_name(s) 2 return last + ',' + first 3 first_name def first_name(s): s 'Walker White' """ Prec : see last_name_first""" end = s.find(' ') end 6 1 return s[0:end] 2 RETURN 'Walker' 9/25/18 Memory in Python 22
Frames and Helper Functions def last_name_first(s): Call: last_name_first('Walker White'): """ Precondition : s in the form last_name_first 2 <first-name> <last-name>""" s 'Walker White' first = first_name(s) 1 last = last_name(s) 2 first 'Walker' return last + ',' + first 3 ERASE WHOLE FRAME def first_name(s): """ Prec : see last_name_first""" end = s.find(' ') 1 return s[0:end] 2 9/25/18 Memory in Python 23
Frames and Helper Functions def last_name_first(s): Call: last_name_first('Walker White'): """ Precondition : s in the form last_name_first 2 <first-name> <last-name>""" s 'Walker White' first = first_name(s) 1 last = last_name(s) 2 first 'Walker' return last + '.' + first 3 last_name 1 def last_name(s): s 'Walker White' """ Prec : see last_name_first""" end = s.rfind(' ') 1 return s[end+1:] 2 9/25/18 Memory in Python 24
Recommend
More recommend