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
相关产品推荐
相关产品推荐

