浅谈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字符串格式化
今天看到了一行这样的代码: boundary = '%.32x' % random.randint(0, 256**16) 我知道这是一个生成格式化字符串的语句,它将随机生成的一个32位16进制数,将 ...
- 开发技术--浅谈Python函数
开发|浅谈Python函数 函数在实际使用中有很多不一样的小九九,我将从最基础的函数内容,延伸出函数的高级用法.此文非科普片~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点 ...
- 开发技术--浅谈python数据类型
开发|浅谈python数据类型 在回顾Python基础的时候,遇到最大的问题就是内容很多,而我的目的是回顾自己之前学习的内容,进行相应的总结,所以我就不玩基础了,很多在我实际生活中使用的东西,我会在文 ...
- 开发技术--浅谈python基础知识
开发|浅谈python基础知识 最近复习一些基础内容,故将Python的基础进行了总结.注意:这篇文章只列出来我觉得重点,并且需要记忆的知识. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对 ...
- 浅谈Python时间模块
浅谈Python时间模块 今天简单总结了一下Python处理时间和日期方面的模块,主要就是datetime.time.calendar三个模块的使用.希望这篇文章对于学习Python的朋友们有所帮助 ...
- 浅谈Python在信息学竞赛中的运用及Python的基本用法
浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...
- 浅谈 js 字符串之神奇的转义
原文:浅谈 js 字符串之神奇的转义 字符串在js里是非常常用的,但是你真的了解它么?翻阅<MDN String>就可以了解它的常见用法了,开门见山的就让你了解了字符串是怎么回事. 'st ...
- 浅谈 js 字符串 trim 方法之正则篇
原文:浅谈 js 字符串 trim 方法之正则篇 关于 trim 其实没啥好说的,无非就是去除首位空格,对于现代浏览器来说只是简单的正则 /^\s+|\s+$/ 就可以搞定了.而且支持中文空格 等 ...
- 浅谈 js 字符串 search 方法
原文:浅谈 js 字符串 search 方法 这是一个很久以前的事情了,好像是安心兄弟在学习js的时候做的练习.具体记不清了,今天就来简单分析下 search 究竟是什么用的. 从字面意思理解,一个是 ...
随机推荐
- asp.net 前后台数据交互方式(转)
https://blog.csdn.net/luckyrass/article/details/38758007 一.前台直接输出后台传递的数据 后台代码: // .aspx.cs public st ...
- C++ 与C# 对应的变量互转
一.C++ 与C# 对应的变量互转的使用实例 C++的动态链接库的函数: C# 调用C++动态链接库数据类型的转换,其中在C++中数据类型为char *,在C#中对应的数据类型为intPtr. 二.常 ...
- 9. ZooKeeper之搭建单机模式。
转自:https://blog.csdn.net/en_joker/article/details/78673456 在集群和单机两种模式下,我们基本完成了分别针对生产环境和开发环境ZooKeeper ...
- ARCGIS刷新的故事
转自原文章ARCGIS部分刷新 1, IActiveView.Refresh 全局刷新,即重绘地图中的所有内容,是效率最低的一种刷新方法.当数据量大时非常耗时.所以除非绝对必要,一般推荐使用IActi ...
- php课程 11-37 类和对象的关系是什么
php课程 11-37 类和对象的关系是什么 一.总结 一句话总结:类生成对象,对象是类的实例化,一定是先有类,后有对象,一定是先有标准,再有个体. 1.oop的三大优势是什么? 重用性,灵活性.扩展 ...
- TPS54232-------电源管理芯片
TPS54232 DC DC开关稳压器 电源管理芯片 放大器俗称功放 注意看芯片的次序1~8是如何排布的,这个规律一般是固定的 也许我们整理多了就能发现引脚的宽度和长度都是规格好的. 下面是封装: 所 ...
- angular 创建服务
一:新建服务模块和服务文件 ng g module services --spec=false ng g service services/quote --spec=false 二:在quote.se ...
- ssh远程执行命令并自动退出
usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [ ...
- zookeeper分布式协调服务的使用一
Zookeeper是一个高性能,分布式的应用协调服务. 提供服务: 1.集群成员的管理(Group Membership) 2.分布式锁(Locking) 3.选主(Leader Election) ...
- UIDeviceOrientationDidChangeNotification和UIApplicationDidChangeStatusBarFrameNotification
这几天做App的时候,需要添加旋转屏通知以便调整UI布局 刚开始我使用的是UIDeviceOrientationDidChangeNotification, 一直有一些问题就是,如果使用这个通知,当i ...