Python Memory Management and Tips Transcripts
Chapter: Memory and classes
Lecture: Delayed fields with properties
0:00 Let's think about some of these things that we're working with here.
0:02 So, like full_name, we're storing "Sarah space Sampson" in memory for this p object,
0:10 and we're also storing Sarah, and we're storing
0:12 Sampson. Wouldn't it be nice if we didn't have to store all that extra info?
0:16 Same thing for age in years and yearly income and so on. So we can go
0:21 to our person object here, and we can change it a little bit.
0:25 Let's make a not so naive, call this "PersonEfficient" like that,
0:32 and it's going to take the same inbound data,
0:34 but instead of doing all of this,
0:36 every one of these is gonna become a property.
0:39 You're probably familiar with the property, but they are functions that you put on the class
0:43 but they actually, from the consumption side, look like fields.
0:46 So the important thing is this bit of code of nicely, just saying "p.full_name"
0:52 will not change, but how we store this stuff will.
0:55 So let's just get cracking on here.
0:58 Say "self.full_name" and in PyCharm we type "prop" and hit tab,
1:02 and it'll write much of this for you.
1:04 And then we want to go down here and just say "return" now we gotta
1:08 say "self.first and
1:10 self.last", and so on. And then what's this
1:14 next one we want? Age in years? Alright,
1:16 here we go. Prop, tab,
1:18 boom! Take all this. Instead of storing it, we're going to return it and
1:25 this will be a "self.birthdate". Perfect.
1:29 We could even go to these and tell them that this is a string,
1:33 this is an int, so that when we work with it,
1:36 it's gonna be a little bit nicer.
1:38 What do we need, yearly income? Again, prop,
1:41 tab, paste, and we come down here
1:43 and we just return that, and we need a self.
1:47 Final one, years to retire. And there we have it.
1:58 Let's do a little cleanup. So these things were only going to do that computation
2:03 when somebody asked for the years to retire or when they ask age in years or if
2:07 they ask for the full name.
2:08 If you don't ask for that,
2:10 we don't even run the code to create it.
2:13 We also don't have to worry about the memory.
2:15 Now, on the flip side,
2:16 if this is something you would create one and then ask for this 100 times you
2:22 might create some kind of, like, cached memory of,
2:24 like, have I computed age in years?
2:26 yes or no. If no, first compute it and then return it if it was expensive.
2:31 So there's always room for some kind of balance.
2:34 But let's try, use this over here and see how that comes out. Do exactly the
2:40 same thing, but this time I'm gonna say person equals this thing, which
2:45 We gotta import. Again, this is really weird,
2:48 you would not normally do that.
2:49 But in this case, for a little demo, we could just,
2:52 you know, swap out the type,
2:54 and have exactly the same code run.
2:57 You think it's gonna be better?
2:58 Think it's gonna be faster? Let's find out.
3:01 So we did it up here,
3:03 and it was, that number was 427 milliseconds and 32 megabytes!
3:09 Look at that! It's much faster.
3:13 basically three times faster, and it used a third less memory.
3:17 Wow wow wow. So that is pretty awesome.
3:20 And as you can see right here,
3:22 the programming model is still the same.
3:24 Hey, Sarah Sampson, let's review your retirement. Your 46 years old.
3:27 You currently make this much a year and all of these are the properties here,
3:30 Okay? So, super, super cool and easy change.
3:34 You're probably familiar with properties, but I just want to make sure that you linked together
3:38 this idea of the property, which is this computer thing often used for validation.
3:43 If you're going to set something,
3:44 you'll check that the variable gets set correctly, or you could use it for, like I
3:48 talked about, cacheing only computed on demand,
3:51 but then store it, and then so on. So there's a lot of functionality behaviors that are interesting
3:55 here. But there's also big memory implications,
3:59 because now we're only storing this data,
4:01 and all of this is just on demand.