浅谈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”; 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)一样,由于这个原因。字符串是能够採用享元模式的。
这是我眼下的理解,假设各位有其他见解,请留下你的见解我们讨论一下。
相关文章
- python实现建造者模式
- python中join的用法
- Python 日期和时间_python 当前日期时间_python日期格式化
- Python 字符串_python 字符串截取_python 字符串替换_python 字符串连接
- python:ERROR: No matching distribution found for Pillow==9.1.0的处理(Python 3.6.8)
- python: 安装DeOldify库:黑白图片上色(Python 3.7.15)
- 网上测试了很多关于PYTHON的WEBSOCKET样例,下面这个才成功了
- python-面向对象-08_多态
- Python Django 数据缓存存储位置类
- Python:利用python语言实现18位身份证号码和15位身份证号码相互转换
- Python之pandas:利用describe函数统计【类别型】特征/离散型变量的描述性统计信息(包括个数count、unique、top及其freq、first、last)之详细攻略
- Python:利用python编程将上海十六区,2020年5月份房价实时地图(数据来源房天下)进行柱状图、热图可视化
- Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名)
- Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(text.insert/link各种事件)
- Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能
- Python语言学习之字符串那些事:python和字符串的使用方法之详细攻略
- 已解决2.Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and wi
- 〖Python零基础入门篇㉓〗- 列表的索引与切片
- 〖Python语法进阶篇⑭〗- 综合实战- 抽奖系统之项目介绍、环境搭建、搭建项目基础类
- prettytable:一款像数据库一样可完美格式化输出的 Python 库
- 关于python使用eyed3查看音频信息时出现Lame tag CRC check failed
- Python编程:abc模块实现抽象类
- Python中的sort() key含义
- Python mutilprocess模块之第二种创建进程方法--继承Process类
- Python kafka操作实例(kafka-python)
- 【Python基础】python爬虫之异步网络爬虫ǃ
- Python科学库sklearn.numpy.scipy. matplotlib.pandas