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

Python中lambda表达式id与变量id不一致的原因咨询

为什么Lambda表达式的ID和其赋值变量的ID不同?

核心原因

每次书写并执行lambda x: x**3这类表达式时,Python都会创建一个全新的匿名函数对象;而普通函数是在def语句执行时生成唯一的函数对象,后续所有对该函数名的引用都指向这个对象。

分情况解析

1. 普通函数的行为

def sq(x):
    return x**2

a = sq
print(id(a) == id(sq))    # 输出True
  • 当def sq(x): ...执行时,Python在内存中生成一个函数对象,并将名字sq绑定到这个对象上。
  • a = sq只是让变量a也引用这个已存在的函数对象,所以a和sq的内存地址(ID)完全相同。

2. Lambda表达式的行为

a = lambda x : x**3
b = a
print(id(a) == id(b))                    # 输出True
print(id(lambda x : x**3) == id(a))      # 输出False 
  • 第一行a = lambda x: x**3:Python创建一个lambda函数对象,将a指向它。
  • b = a:b引用的是a指向的同一个lambda对象,所以ID相同,这和普通函数赋值逻辑一致。
  • 第三行id(lambda x: x**3):这里Python重新创建了一个独立的lambda对象——哪怕代码逻辑和之前的lambda完全一样,它也是内存中全新的对象,因此ID和a指向的对象不同。

额外验证

你可以直接测试两次相同lambda表达式的ID,会发现它们也不一样:

print(id(lambda x: x**3) == id(lambda x: x**3))  # 输出False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 03:04:56