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

赋值True/False的变量是否引用内存中地址固定的布尔对象?

布尔变量是否引用内存中固定地址的True/False常量对象?

背景

我在研究==和is的区别时,了解到==用于比较对象的值,is用于检查两个对象是否为同一实例(即是否占用同一内存地址)。随后测试了这段代码:

foo = False

if foo is False:
    print("1")

原本以为会报错(认为False是值,is无法处理),但代码运行通过了,因此产生疑问:所有布尔变量是否都持续引用内存中地址固定的True和False这两个对象?

回答

你的猜测完全正确。在Python里,True和False是单例对象——内存里只会存在这两个布尔实例,它们的地址是固定不变的。

不管你是直接写variable = True赋值,还是通过逻辑运算(比如variable = 2 == 2)得到布尔结果,最终变量都会指向这两个固定的实例。这也是你测试的代码能正常运行的原因:False本身就是一个对象实例,is关键字就是用来判断两个变量是否指向同一个内存地址的实例,所以foo is False是完全合法的写法。

另外补充个小知识点:Python对这类常用的小对象都会做单例优化,比如-5到256之间的整数,也都是固定内存地址的单例,这么做是为了减少重复创建相同对象的内存开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:39:58