Python变量与内存分配:两段代码的内存及时间消耗是否相同?
关于两段conv函数的内存与时间消耗问题
先直接给结论:两段代码的内存消耗几乎完全相同,执行时间也没有可感知的差异,第一段里的变量a并不会产生额外的、值得关注的内存开销。
具体解释:
- 内存层面:
int(txt)会创建一个整数对象(比如这里的整数4),不管是把它赋值给a再返回,还是直接返回这个对象,本质上都是返回这个整数对象的引用。变量a只是函数栈帧里的一个局部名称,它占用的只是一个指针大小的空间(64位系统里是8字节),和整数对象本身的内存比起来完全可以忽略。而且函数执行结束后,局部变量a会被立即回收,不会留下额外内存占用。 - 时间层面:给变量赋值是Python里极轻量的操作,两段代码的字节码差异极小,实际运行时的时间差小到几乎无法用常规手段测出,对程序性能没有任何影响。
如果想直观验证,可以用dis模块查看两段函数的字节码:
import dis def conv1(txt): a = int(txt) return a def conv2(txt): return int(txt) print(dis.dis(conv1)) print(dis.dis(conv2))
输出的字节码里,conv1多了一条STORE_FAST(把结果存到局部变量)和一条LOAD_FAST(加载这个变量),但这两个操作的耗时可以忽略不计。
内容的提问来源于stack exchange,提问作者Success
相关产品推荐
相关产品推荐

