讲师中心 微信公众号
AI工具推荐 视频效率加速

Python 小整数缓存机制面试常见问题

阿雪姑娘_1436

阿雪姑娘_1436

发布时间:2026-02-25 20:05:46

|

393人浏览过

|

来源于php中文网

原创

小整数缓存范围是-5到256(含),这是CPython实现的性能优化,基于高频使用经验设定,并非语言规范要求;超出该范围的整数每次创建均为新对象,故应始终用==而非is比较数值相等。

python 小整数缓存机制面试常见问题

Python 中的小整数缓存(small integer caching)是面试中高频出现的概念,核心在于理解 is 与 == 的区别、对象身份与值相等的差异,以及 CPython 实现层面的优化策略。

小整数缓存的范围是多少?为什么是这个范围?

CPython 默认缓存 -5 到 256(含两端)之间的所有整数。这个范围不是语言规范强制要求的,而是 CPython 解释器的实现细节(见 Objects/longobject.c 中的 NSMALLPOSINTS 和 NSMALLNEGINTS 宏定义)。

选择该范围主要基于经验统计:日常代码中,这个区间内的整数被频繁使用(如循环索引、布尔结果、列表长度、ASCII 码等),缓存它们能显著减少内存分配和垃圾回收开销。

  • 超出该范围的整数每次创建都是新对象(即使值相同)
  • 不同 Python 实现(如 PyPy、Jython)可能不缓存,或缓存策略不同
  • 该行为不可依赖于跨版本或跨实现的稳定性

为什么 a = 256; b = 256; a is b 返回 True,但 a = 257; b = 257; a is b 却不一定?

因为 256 在缓存范围内,解释器在编译期或运行期复用同一个对象;而 257 不在缓存范围内,通常每次字面量出现都会新建一个 int 对象。

立即学习“Python免费学习笔记(深入)”;

但注意:在交互式环境或同一代码块中,编译器可能做常量折叠(constant folding)优化,导致看似“意外”的 is 为 True:

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载
# 同一行或同一代码块中,可能被优化为同一对象
a, b = 257, 257  # 可能 a is b → True(因常量合并)
c = 257; d = 257  # 也可能 True(取决于编译器处理方式)
<h1>但分开执行就大概率是 False</h1><p>e = 257
f = 257
print(e is f)  # 很可能 False

因此,永远不要用 is 比较整数是否相等——应使用 ==。

如何验证某个整数是否被缓存?

最直接的方法是检查两个相同值的整数对象是否为同一对象:

def is_cached(n):
    a = n
    b = n
    return a is b
<p>print(is_cached(256))   # True
print(is_cached(257))   # 通常 False(但非绝对,见上条说明)

更严谨的方式是观察对象 ID 是否一致,或借助 sys.getrefcount()(注意:调用本身会临时增加引用计数):

  • 缓存整数的引用计数通常远高于普通整数(因全局持有)
  • 但 getrefcount() 不适合用于判断缓存,仅作辅助观察

面试中容易踩坑的延伸问题

考官常借小整数缓存引申出更深层的理解:

  • 为什么 True is 1 和 False is 0 是 False? 因为 bool 是 int 的子类,但 True 和 False 是单例对象,各自独立于整数缓存池。它们的 ID 与 1、0 不同。
  • 字符串也有类似缓存吗? 有,叫“字符串驻留(string interning)”,但规则不同:仅对符合标识符规则的字符串(如变量名)自动驻留;可手动用 sys.intern() 强制驻留。
  • 能否禁用或修改小整数缓存? 不能。这是 CPython 编译时硬编码的优化,用户层无法更改。试图绕过它(如用 int("257"))仍会生成新对象。

掌握小整数缓存的关键,不在于死记 -5~256,而在于理解其背后的性能动机、明确 is 的语义(对象同一性)、并养成用 == 做数值比较的习惯。这是 Python “显式优于隐式” 和 “实用主义优先” 设计哲学的一个典型缩影。

热门AI工具

更多
小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6779

2023.08.02

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6184

2023.10.24

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6184

2023.10.24

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

15840

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1163

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

8730

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

3462

2025.08.07

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1818

2023.08.03

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

40

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn