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

Python中字符串乘法的工作原理及is判断结果差异原因是什么?

Python字符串乘法运行机制与is结果差异说明

核心前提

  • is运算符的作用是判断两个对象是否指向同一块内存地址,和判断值是否相等的==逻辑完全不同。
  • Python 存在常量折叠和字符串驻留两个优化机制,是这个现象的核心原因。

具体原因分析

1. 'a'*2 is 'a'*2返回True的原因

当乘法的两个操作数都是编译阶段就能确定值的字面量时,Python解释器会在编译代码的阶段直接计算出'a'*2的结果'aa',同时对于这类长度较短、仅由安全ASCII字符组成的字符串,Python会自动做驻留处理,也就是全局只保留一份相同值的字符串对象重复使用,所以两次'a'*2拿到的是同一个内存地址的对象,is判断返回True。

2. 'a'*2 is 'a'*n返回False的原因

这个表达式里的n是变量,编译阶段无法确定n的实际值,所以'a'*n的计算逻辑会推迟到程序运行阶段执行,运行阶段动态生成的字符串默认不会自动触发驻留复用,会新开辟一块内存空间存储生成的'aa',和编译阶段生成的'aa'内存地址不同,所以is判断返回False。

补充验证

如果手动驻留运行期生成的字符串,结果就会变成True:

>>> import sys
>>> n = 2
>>> 'a'*2 is sys.intern('a'*n)
True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:48:04