面试题答案
一键面试def filter_people(lst):
return [person for person in lst if person['age'] > 30]
Python函数在处理这种嵌套结构列表时的内存管理机制
- 列表创建:当函数执行
[person for person in lst if person['age'] > 30]
时,会在堆内存中为新的列表分配空间。列表对象本身会存储在堆中,其引用会存储在栈中。 - 字典对象:原列表中的字典对象在堆内存中有自己的存储空间。在生成新列表时,新列表中的元素是对原字典对象的引用,而不是复制字典对象。这意味着新列表和原列表中的相关字典共享相同的内存空间,减少了内存开销。
- 函数调用栈:函数调用时,会在栈中为函数创建一个栈帧。栈帧中存储函数的局部变量(在这个例子中,
lst
是传入的参数,也是局部变量),以及函数执行过程中的临时数据。函数执行结束后,栈帧被销毁,局部变量的引用被释放。但由于堆中的列表和字典对象可能还有其他引用(例如新列表对字典的引用),所以这些对象不会立即被垃圾回收。 - 垃圾回收:Python有自动垃圾回收机制。当堆中的对象(如列表、字典)没有任何引用指向它们时,垃圾回收器会在适当的时候回收这些对象占用的内存,将其标记为可重用内存,从而实现内存的自动管理和释放。