扫码关注官方订阅号
x = 'a b' y = 'a b' x is y False
为什么会是 false 呢? 空格有什么特殊的地方么?
认证高级PHP讲师
is是比较对象==是比较值
is
==
对于字符串,你也可以用is比较,前提是要人工对字符串进行intern.
intern
x = 'a b' y = 'a b' #intern(x) is intern(y)为True
对于空格的问题,是因为Python只会自动对0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz这样的字符串进行intern处理
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
Intern机制的目的在于,在Python运行系统中,不论用户创建了多少像上面的a,b,c,只有一个”Python“对象,其他的都是指向这个对象,大家共用这个对象。也就是说,当a创建的时候,Python会对a进行Intern机制处理,然后当b创建的时候,b指向一个PyStringObject temp,通过intern机制发现已经有b与a的对象存储的字符串其实一样,那么就会把b指向a指向的那个对象,这样用来创建b的那个临时对象temp会因为b指向其他对象而进行de_allocate而销毁,这样就不会浪费内存了。
参考: intern对PyStringObject的认识(Intern机制)intern处理的字符串可以在这找到
# a is b 判断的是 id(a) == id(b), 你打印他们的id,明显不同,所以为false print id(x) pirnt id(y)
如果想字符串比较请直接 a==b
a==b
ps: Python中的对象包含三要素:id、type、value。其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值。is判断的是a对象是否就是b对象,是通过id来判断的,==判断的是a对象的值是否和b对象的值相等,是通过value来判断的
http://stackoverflow.com/questions/2123925/when-does-python-allocate-new-memory-for-identical-strings
摘第一个答案的第一句话:每个python的实现都可以自由如何判断是寻找已经存在的相同值的对象引用还是分配新的空间
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
is是比较对象==是比较值对于字符串,你也可以用
is比较,前提是要人工对字符串进行intern.对于空格的问题,是因为Python只会自动对
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz这样的字符串进行intern处理参考: intern
对PyStringObject的认识(Intern机制)
intern处理的字符串可以在这找到
如果想字符串比较请直接
a==bps:
Python中的对象包含三要素:id、type、value。其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值。is判断的是a对象是否就是b对象,是通过id来判断的,
==判断的是a对象的值是否和b对象的值相等,是通过value来判断的http://stackoverflow.com/questions/2123925/when-does-python-allocate-new-memory-for-identical-strings
摘第一个答案的第一句话:每个python的实现都可以自由如何判断是寻找已经存在的相同值的对象引用还是分配新的空间