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

Python函数内存管理疑问:无返回值函数返回对象为何一致?

问题解答:为何无返回值函数赋值的变量a和b相等?

测试代码

import sys
import gc

def func_a(a,b,c):
    print(a,b,c)

def func_b():
    print("b")

a = func_b()
b = func_a(1,2,3)
print(id(a) == id(b))
print(a is b)

class c_1():
    def __init__ -> None:
        pass

class c_2():
    def __init__ -> None:
        pass

c1 = c_1()
c2 = c_2()
print(id(c1) == id(c2))
print(c1 is c2)

运行输出

b
1 2 3
True
True
False
False

问题

为何变量a和b相等?当我给函数添加return 1或其他非None返回值时,a和b就不相等了,望解答。

解答

  • Python中,没有显式return语句的函数,默认返回None。所以a = func_b()和b = func_a(1,2,3)本质是把同一个None对象赋值给了a和b。
  • Python对None实现了单例机制:整个程序运行期间只会存在一个None实例。因此用is判断对象身份时会返回True,调用id()获取的内存地址自然也完全相同。
  • 当给函数添加return 1这类非None的返回值时,每次函数调用都会生成新的返回对象(即使返回值数值相同,也不会像None那样共享单例),此时a和b指向的是不同对象,is判断返回False,id()结果也不相等。

另外补充说明代码中类实例的部分:c1和c2是两个不同类的实例,哪怕类结构一致,每次实例化都会创建全新的对象,因此它们的内存地址不同,is判断结果为False,这和None的单例特性形成了明显对比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:50:24