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

为何CPython中相等字符串同对象,相等range、列表却不同?

关于Python对象is判断结果差异的原因

先明确:is判断的是两个变量是否指向同一个内存地址的对象,而非值是否相等。你遇到的现象本质是Python针对不同类型对象的内存复用策略不同:

  • 字符串a和b的情况:
    Python有**字符串驻留(String Interning)**机制,会自动缓存某些符合条件的字符串(比如不含特殊字符的短字符串、编译时可确定的字符串字面量)。当你两次赋值相同的字符串字面量时,Python不会创建新对象,而是让两个变量指向同一个已缓存的字符串对象,所以a is b返回True。

  • range对象c和d的情况:
    尽管range是不可变类型,但Python不会对range对象做自动驻留。每次调用range(100)都会生成一个全新的range对象,哪怕参数完全一致,所以c和d指向不同的内存地址,c is d返回False。

  • 列表e和f的情况:
    列表是可变对象,Python的内存管理策略中,绝不会自动复用可变对象的实例。每次执行[]都会创建一个新的空列表对象,因此e和f的内存地址不同,e is f返回False。

总结:只有部分不可变对象(如符合条件的字符串)会被Python自动驻留复用,大部分不可变对象(如range)和所有可变对象(如列表),每次创建都会生成新的实例,用is判断自然返回False。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:11:13