玩蛇网提供最新Python编程技术信息以及Python资源下载!

求python高手解答python源码中False是什么意思

x = 'a b'
y = 'a b'
x is y
False

为什么会是 false 呢? 空格有什么特殊的地方么?

http://stackoverflow.com/questions/2123925/when-does-python-allocate-new-memory-for-identical-strings

摘第一个答案的第一句话:每个python的实现都可以自由如何判断是寻找已经存在的相同值的对象引用还是分配新的空间

is是比较对象
==是比较值

对于字符串,你也可以用is比较,前提是要人工对字符串进行intern.

x = 'a b'
y = 'a b'

#intern(x) is intern(y)为True

对于空格的问题,是因为Python只会自动对0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz这样的字符串进行intern处理

参考: intern
对PyStringObject的认识(Intern机制)
intern处理的字符串可以在这找到

# a is b 判断的是 id(a) == id(b), 你打印他们的id,明显不同,所以为false
print id(x)
pirnt id(y)

如果想字符串比较请直接 a==b

ps:
Python中的对象包含三要素:id、type、value。其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值。is判断的是a对象是否就是b对象,是通过id来判断的,==判断的是a对象的值是否和b对象的值相等,是通过value来判断的

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

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年05月31日 - 11时06分45秒 发布自玩蛇网

您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容
我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules