首页 > 代码库 > 浅谈python字符串存储形式
浅谈python字符串存储形式
http://blog.csdn.net/zhonghuan1992
钟桓
2014年8月31日
浅谈python字符串存储形式
记录一下自己今的天发现疑问并且给出自己现有知识有的回答。长话短说,用过python的人对于 == 和 is 应该不陌生,但是这里我还是介绍一下。
==是用来判断两个东西是否相等,比如:
a = 10; b = 10; print(a == b);
输出是true;
再看一个例子:
a = [1,2,3]; b = [1,2,3]; c = [1,2,4]; print(a==b); print(a==c);
输出分别是 true 和 false ;
再来看 is ;是用来判断同一性而不是相同性。
来看下面的例子:
x = [1,2,3]; y = [1,2,3]; print(x is y);
输出是 false;
而只有:
x = [1,2]; y = x; print(x is y);
输出是true;
从上面的例子中可以看出 == 和 is 两个的区别之处。
现在疑问来了,我们把对比的东西换成是字符串的话,结果是否会出乎你意料。看下面的例子:
x = “huan”; y = x; print(x == y); print(x is y);
我想大家能够猜出输出什么。
输出是:true
true
现在看下面的例子:
x = “huan”; x = “huan”; print(x == y); print(x is y);
大家猜,结果是什么?
输出是:true
true
为什么会这样呢?x 和 y 相等可以理解,可是为什么x和y是同一个对象?据我猜测,python内部存储字符串,采用的是享元模式(Flyweight pattern), 什么是享元模式,可以看我前些日子写的一篇blog,http://blog.csdn.net/zhonghuan1992/article/details/38856591,这是我目前的理解,如果各位有其它见解,请留下你的见解我们讨论一下。
浅谈python字符串存储形式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。