当调用如下所示的groupby_even_odd
函数时,Python如何管理分配给函数变量的内存?
返回值后,函数变量even_nums/odd_nums
使用的内存会发生什么变化?
我的搜索包含的产量信息对我来说有点太技术化了。如果有人能指出我一些好的信息或分享一些指示我会非常感激
提前致谢。
def groupby_even_odd(numbers):
even_nums = [number for number in numbers if not number % 2]
odd_nums = [number for number in numbers if number % 2]
return {'even': even_nums, 'odd': odd_nums}
答案 0 :(得分:1)
CPython的内存管理基于引用计数。基本上,它会跟踪代码中有多少“事物”引用特定对象。当引用计数降为0时,python将回收对象的内存以供重用或可能完全取消分配。举个例子:
even_nums
时,该列表的引用计数为1(even_nums
引用该列表)。even_nums
的引用,因此引用计数变为2。even_nums
)的引用消失,这使得引用计数回落到1。此时,我们不能说太多其他内容。如果调用者随后保留对返回值的引用,则引用计数将保持为1.如果调用者未保留对返回值的引用,则引用计数将降至0并且垃圾收集器将回收该内存。
循环引用也可能出现一些细微之处(列表指的是引用回列表的对象)。在这种情况下,引用计数无法自行降至0。幸运的是,python检测到这些情况并能够释放这些对象以防止内存泄漏。