MST

星途 面试题库

面试题:Python函数传递列表的复杂操作

有一个函数,其参数为一个列表,列表中的元素是字典,每个字典有'name'和'age'两个键。编写函数实现将年龄大于30岁的人的信息提取出来,组成一个新列表返回,并阐述Python函数在处理这种嵌套结构列表时的内存管理机制。
31.5万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
def filter_people(lst):
    return [person for person in lst if person['age'] > 30]

Python函数在处理这种嵌套结构列表时的内存管理机制

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