python中字符串查找空格算不算一个字符_Python3当字符串中包含空格符时不查找却重建是为什么...

Python3不重用包含空格符字符串

我记得Python是使用内存池来管理整形数和小的字符串,也就是说a='abc'时,Python是先查找是否存在对象abc,如果存在,则a直接引用它,不存在再创建对象abc。但是,我在Python3的IDLE中遇到下面的现象:

0a5478f9e04ff431ccddce79b1e87901.png

注意到,当字符串中包含空格符时,貌似Python就不会去找(或者说找不到)已经存在的对象a b,而是重新创建了一个。

请问,这是为什么?

这不是语言特性,视具体实现不同而定。

这要看字符串里有什么,有空格的时候内存存放位置就不一样了,你用id(a)、id(b)、id(c)、id(d)来看这几个变量的id值就知道了。

数字的情况,可以参考:>>> a=2

>>> b=2

>>> a is b

True

>>> a=2.5

>>> b=2.5

>>> a is b

False

正如@足兆叉虫所说,这不是语言特性,属于实现层面的东西。

我来补充一下。 @Reuynil 。欢迎探讨。

这个问题与Python的intern机制有关。

简单来说就是:在交互式环境下,Python只会对包含Python identifiers(下划线、数字、字母)的字符串进行intern。空格不属于Python identifiers。所以,id(c) != id(d)。

感兴趣的可以去查看一下Python源码里的stringobject.h文件,注释上有这么一段:

当然,Python的内部机制不会这么简单的,会存在特殊处理的情况。比如执行>>> a = " ",>>> b = " ",>>> a is b得到的结果是True。存在这个矛盾的情况是因为对于0或1个字符的字符串,Python是进行了intern处理的。

可见,对于任意字符串Python都是可以进行intern处理的,只不过对于问题中的情况,Python在实现时选择了不处理而已,所以说,这是一个实现的问题,不是语言特性。

另外,你可以将代码写到脚本中,会发现得到的都是True。

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd18854.html

相关文章 Recommend

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值