Python直接传数字与赋值变量后传参哪种存储占用更低
两种Python函数调用方式的存储空间占用对比
先上明确结论:直接传入数字的方法1存储空间占用更小,但二者的内存差距极小,不存在“变量额外存储数字本身”的情况。
两种写法的参考代码如下:
def add(a,b): print(a+b) # 方法1:直接传入数字调用 add(2,3) # 方法2:先赋值给变量再传参调用 a = 2 b = 3 add(a,b)
核心原理拆解
首先要明确Python的变量本质和小整数缓存规则:
- Python中所有变量都不是“存储值的盒子”,只是绑定到内存对象的名字标签,赋值操作不会复制对象本身,只是给已有对象新增一个名字引用。
- Python默认对
-5~256区间的小整数做全局驻留缓存,代码里不管写多少次2、3,指向的都是内存中提前创建好的同一个整数对象,不会重复生成新的整数实例,这部分内存开销两种写法完全一致。
两种写法的实际内存差异
两种写法的内存差只来自变量绑定的命名空间开销:
- 方法1执行时,解释器直接在函数调用栈帧里传入对缓存整数2、3的引用,不会在当前作用域(比如全局作用域)新增额外的名字绑定,调用结束后栈帧销毁,相关引用直接回收,无额外常驻开销。
- 方法2在调用函数前,会在当前作用域的命名空间字典里新增
a、b两个条目,每个条目存储变量名的字符串和对应对象的内存指针(64位Python下单个指针占8字节),这部分就是方法2多出来的内存开销,总大小只有十几字节,几乎可以忽略。- 如果
a、b是在局部作用域(比如另一个函数内部)定义的,作用域执行结束后这部分命名空间空间会被立刻回收,不会长期占用内存。 - 如果
a、b定义在全局作用域,这部分微小开销会持续到程序退出。
- 如果
不存在“使用变量会额外存储数字副本”的情况,多占的仅仅是命名空间里存名字和引用指针的极小空间,日常开发中完全不需要为了这点开销刻意避免使用变量,优先保证代码可读性即可。
内容的提问来源于stack exchange,提问作者Tanmay Sahu
相关产品推荐
相关产品推荐

