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

Python id函数解析:未赋值给变量的值为何能返回唯一标识符?

为什么直接对未赋值的字面量调用Python的id()也能返回唯一标识符?

先看你给出的两个示例:

第一个示例,赋值变量后调用id和直接用字面量调用id结果一致:

x="ADCAADAFAVVA"
print(id(x)) 
print(id("ADCAADAFAVVA")) 

# 输出:
# 123456789
# 123456789

第二个示例,直接对未赋值的字面量调用id也能得到结果:

print(id("ADadasdaaqdas"))

# 输出:
# 98231527347

核心原因:Python里一切都是对象

不管是赋值给变量的字符串,还是你直接写在代码里的字面量,本质上都是Python对象。当代码执行到id("ADadasdaaqdas")时,Python解释器会先在内存中创建这个字符串对象,然后把这个对象传给id()函数——id()的作用本来就是返回对象在内存中的唯一标识(也就是内存地址),所以哪怕这个对象没有被任何变量引用,只要它在内存中存在,id()就能返回它的标识。

补充解释第一个示例的现象

第一个示例里两个id相同,是因为Python的**字符串驻留(String Interning)**机制:对于某些符合规则的字符串(比如由字母、数字、下划线组成的字符串,或者较短的字符串),解释器会复用同一个内存对象,避免重复创建。所以变量x指向的对象和你直接写的"ADCAADAFAVVA"字面量是同一个,自然id相同。

关于临时对象的回收

那些没有被变量引用的字面量对象,在id()执行完成后,因为没有任何引用指向它,Python的垃圾回收机制会很快把它从内存中清理掉,但在调用id()的那个瞬间,它确实是存在于内存中的,所以能被id()获取到标识。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:08:13