谈谈Python的常量池

今天,无意中看到知乎上一个关于Java的问题大概是这样的

String a="a";String b="a"; 为什么 a==b 值为 true?

咋的一看,无非就是因为它是字符串常量,它被放到了一个共享的地方,这个地方称为字符串常量池,它保存所有的常量字符串,每个常量只会被保存一份,被所有所有者共享。出于好奇,我也想了解一下Python这方面的知识。以前看过一些资料,我知道Python是有常量池存在的,但是是小整数常量池,比如

a = 1
b = 1
a == b # true
a is b # true
c = 1234
d = 1234
c == d # true
c is d # false

这里也比较好理解,a is b为true是因为a和b都是小整数,它们都放在小整数常量池中, c is d 为false的原因是c和d不在小整数常量池中,那么小整数常量池的范围是多少呢?大概范围是这样的:(-5, 256)

然后再看下面一段代码:

a = 'ab'
b = 'ab'
a == b # true
a is b # true
c = str(100)
d = str(100)
c == d # true
c is d # false

这里我就比较疑惑了,为啥 a is b为true呢?难道Python中也有一个字符串常量池吗?那为什么c is d为false呢?在stackoverflow中找到了一个回答,可以解决我的问题。想通了也比较简单,c 和 d可以类比于java中的这段语法

String c = new String('100');
String d = new String('100');

这里 c和d自然不是同一个对象。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,560评论 18 399
  • 《裕语言》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 28,495评论 5 19
  • 《ilua》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 1...
    叶染柒丶阅读 13,806评论 0 11
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,873评论 19 139
  • 今天小石头妈妈来家换书,俩个好朋友自然玩的很好。一进门壮壮就说你怎么这么晚才来。然后奇怪的是两个人一起开始玩,但是...
    田金平阅读 1,355评论 0 0

友情链接更多精彩内容