You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python函数内创建的列表是否存栈内存?返回及numpy数组使用是否安全?

Python中函数内创建的对象内存与安全性问题

函数内创建的列表的内存存储与返回安全性

  • Python的内存模型和C完全不同:所有Python对象(包括列表、numpy数组)都存储在堆内存中,函数栈里仅存放这些对象的引用(类似指针的概念)。
  • 函数内创建的列表,只要还有活跃的引用指向它(比如返回给外部、添加到外部容器里),Python的垃圾回收机制就不会回收这个对象,所以返回或者传递这类列表是完全安全的,不存在C语言中栈内存回收导致的失效问题。

针对你的代码的安全性分析

你的函数代码:

def f(list_value: list):
    a = numpy.zeros(5)
    b = numpy.zeros(4)
    list_value.append(a)
    list_value.append(b)

调用代码:

list_value = []
f(list_value)
a = list_value[0]
b = list_value[1]
  • 代码里的a和b是numpy创建的数组对象,同样存储在堆内存中。函数f执行完毕后,虽然函数栈里的局部引用会被销毁,但你已经把这两个数组对象的引用添加到了外部的list_value列表里,而list_value在函数外是活跃的。
  • 后续你通过list_value[0]和list_value[1]获取到的引用赋值给变量a和b,这些新的引用会继续维持数组对象的存活状态,所以后续使用这两个变量是绝对安全的,不会出现C语言中栈内存释放导致的非法访问问题。

Python的垃圾回收机制基于引用计数(辅以分代回收),只要对象的引用计数大于0,就不会被回收,这从根本上避免了C语言中栈内存相关的安全问题。

内容的提问来源于stack exchange,提问作者fabianod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:42:37