Python Memory Management and Tips Transcripts
Chapter: Python variables and memory
Lecture: Does Python have pointers?
0:00 Alright. Time for some python code.
0:02 In a big question, does Python have pointers?
0:05 Well, let's look at a function. The same, SamePerson function but written in Python.
0:09 So here we have a function: def
0:12 same_person, and we're passing a p1 and a p2,
0:15 and we're using type annotations to indicate this is a person class.
0:18 So, p1 is a person, p2 is a person indicating
0:21 also the function returns a bool, true or false, on whether they're actually the same
0:26 person. But notice p1.id == p2.id
0:31 That's not that arrow thing,
0:33 right? We don't have to treat it differently.
0:35 And if you think about Python,
0:37 you've probably never seen the star in the context of meaning
0:40 this is a reference or a pointer to a thing you've never allocated memory,
0:45 you probably never cleaned it up.
0:47 There's a del key word, but that means something totally different that doesn't really directly
0:51 affect memory. Are there pointers here?
0:54 I don't see any pointers. Here's the thing.
0:56 Let's try to print out p1 and p2 and see what we get.
1:00 Well, the interpreter would just say "__main__"
1:03 we have a person class object.
1:06 So person is the class and we've created one of them.
1:08 So object at this memory location. Hmm, at this memory location sounds a little bit like, well
1:14 what we have the pointers,
1:16 doesn't it? You could also use this function,
1:18 the cool function in Python a built-in called "id" and say,
1:22 where does this thing, basically, where does it live?
1:26 Hey, and if those numbers are the same,
1:28 they're sharing the location. If they're not,
1:30 it's a not shared thing. And we can talk about that.
1:32 We will talk about that as we go.
1:35 But if you go out here and actually look in memory,
1:39 we're gonna have two things out on the heap dynamically allocated,
1:43 And these are going to be pointing to it.
1:45 Well, p1 and p2
1:46 are pointing to it. Those id of them actually correspond to the address.
1:50 This is the same situation as we had in C++ pointers.
1:54 The language is hiding it from us.
1:56 We don't have to worry about it,
1:57 right? That's cool. But as you think about, you know,
2:01 what is the lifetime of p1 and p2?
2:04 Who was in charge of it?
2:05 All those same questions I asked,
2:06 Come up. Who owns these objects?
2:09 Well, in Python, the answer is better because you don't have to worry about
2:13 it. Like I said, you probably have never really thought about cleaning up memory
2:16 by, like, going free or delete or whatever on some thing you've created.
2:20 Because you can't really do that. But somebody has to, right? If these get created.
2:24 So the question Who owns it
2:25 it's kind of, it's interesting,
2:27 It's kind of the community of all the things in the program,
2:30 all the things that share that piece of data.
2:34 Once they all stop paying attention to it,
2:36 it goes away. It goes away for one and other reason.
2:39 There's a couple ways in which it could go away and we'll talk about it.
2:42 But the runtime itself kind of owns of these objects.
2:45 You don't have to worry about that.
2:47 How long were they stick around? Until everyone is done with them, maybe a little bit
2:52 longer, depending on how they're linked together.
2:55 But generally speaking, just until everyone is done with it and the runtime also knows
3:01 who's paying attention to it, so you don't have to worry about the time.
3:03 It is really nice. So in a sense we have pointers in Python,
3:07 yes, but we don't have the syntax of pointers, lovely.
3:11 Nor do we have all the stuff for in the memory management and the accounting of
3:15 who owns what, when, and when it should be cleaned up.
3:17 All those things are gone, which is beautiful,
3:19 but we also need to understand how and when Python does those things on our behalf
3:24 right? Does Python have pointers?
3:26 I'm going to say yes, Python has pointers,
3:29 but you don't syntactically have to worry about it.