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”;
y = “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的同学应该了解,字符串在python中属于不变的类型,和元组(tuple)一样,由于这个原因。字符串是能够採用享元模式的。

这是我眼下的理解,假设各位有其他见解,请留下你的见解我们讨论一下。

最新文章

  1. echarts饼图
  2. C++ create_task详解
  3. supervisor program配置实例
  4. php 工厂模式
  5. bug_ _ 常见的bug1
  6. atoi()函数的实现
  7. Vim键盘图与命令图解
  8. JSTL和select标签的组合使用
  9. 引用类中的enum
  10. Java基础之J2EE规范
  11. java 一款可以与ssm框架完美整合的web报表控件
  12. highcharts框架使用总结
  13. Centos7开机启动自己的脚本的方法
  14. Netty ByteBuf和Nio ByteBuffer
  15. IntelliJ IDEA 导航的 20 大特性
  16. javascript精雕细琢(一):var let const function声明的区别
  17. python webdriver 显示等待-自动登录126邮箱,添加联系人
  18. Selenium IDE录制脚本
  19. Java基础面试题 (一)
  20. 64位ubuntu下Android开发环境的配置

热门文章

  1. 一句话解决Ping问题(主机,开发板,虚拟机)
  2. 【LightOJ - 1205】Palindromic Numbers
  3. WPF 入门《常用控件》
  4. SpringBoot+springmvc异步处理请求
  5. matlab 局部特征检测与提取(问题与特征)
  6. AndroidStudio 内存泄漏分析 Memory Monitor
  7. (转) 如何取消Linux下,vi中显示的^M符号
  8. Redis的高级应用-安全性和主从复制
  9. sampleviewer add menu item error 'assert'
  10. C Tricks(十九)—— 求以任意数为底的对数