免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2379 | 回复: 7
打印 上一主题 下一主题

为什么使用is比较str时有时是true,有时是false? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-09 14:11 |只看该作者 |倒序浏览
>>> a="many"
>>> b="many"
>>> a is b
True
>>> a == b
True
>>> a="many paths"
>>> b="many paths"
>>> a==b
True
>>> a is b
False


我试了一下,中间有空格就是false,初学python,敢问为什么有这样的区别?
我使用的是python3.2.2

论坛徽章:
0
2 [报告]
发表于 2012-04-09 14:35 |只看该作者
这好像是工具问题吧,写在代码中没有这个问题的吧。
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-

  3. import sys


  4. def myprint(obj, end='\n'):
  5.     sys.stdout.write(str(obj) + end)


  6. def main():
  7.     a = 'many'
  8.     b = 'many'
  9.     myprint(a is b)

  10.     c = 'many paths'
  11.     d = 'many paths'
  12.     myprint(c is d)


  13. if __name__ == '__main__':
  14.     main()
  15.     myprint('done')
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-04-09 15:29 |只看该作者
看来是这样的,直接在IDLE中运行就是False,写在文件中就是True

十分感谢

论坛徽章:
0
4 [报告]
发表于 2012-04-09 18:01 |只看该作者
本帖最后由 3227049 于 2012-04-09 18:04 编辑

is相等指同一个对象(id相等), python有个interned池用来复用短字符窜, 所以会出现两个短字符窜is相当, 但是比较字符窜相等应该用==

论坛徽章:
0
5 [报告]
发表于 2012-04-09 23:00 |只看该作者
学习了  :wink:

论坛徽章:
0
6 [报告]
发表于 2012-04-10 13:34 |只看该作者
3227049 发表于 2012-04-09 18:01
is相等指同一个对象(id相等), python有个interned池用来复用短字符窜, 所以会出现两个短字符窜is相当, 但是 ...


是不是只有IDLE才会这么做呢?因为直接执行python语句的话返回的就都是False

论坛徽章:
0
7 [报告]
发表于 2012-04-11 22:02 |只看该作者
mdou1986 发表于 2012-04-10 13:34
是不是只有IDLE才会这么做呢?因为直接执行python语句的话返回的就都是False


也不一定的, 短的一般都是True, 经过操作后才会False
#coding:utf-8

import urllib.request as urllib

response = urllib.urlopen("http://www.baidu.com/").read().decode('gb18030')

response2 = response[:]

print (response is response2)
print (response  == response2)

response2 = (response2+"test")[:-4]

print (response is response2)
print (response == response2)


不过is的用途还是比较两个对象是否是同一个对象, 并不是比较两个对象是否相等, python出现两个不同字符窜is相等是本身的字符窜缓存机制的作用, 比较字符窜上还是应该用==

论坛徽章:
0
8 [报告]
发表于 2012-04-14 10:58 |只看该作者
3227049 发表于 2012-04-11 22:02
也不一定的, 短的一般都是True, 经过操作后才会False


恩,知道了,十分感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP