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字符串存储形式的更多相关文章

  1. 从一行代码开始,浅谈python字符串格式化

    今天看到了一行这样的代码: boundary = '%.32x' % random.randint(0, 256**16) 我知道这是一个生成格式化字符串的语句,它将随机生成的一个32位16进制数,将 ...

  2. 开发技术--浅谈Python函数

    开发|浅谈Python函数 函数在实际使用中有很多不一样的小九九,我将从最基础的函数内容,延伸出函数的高级用法.此文非科普片~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点 ...

  3. 开发技术--浅谈python数据类型

    开发|浅谈python数据类型 在回顾Python基础的时候,遇到最大的问题就是内容很多,而我的目的是回顾自己之前学习的内容,进行相应的总结,所以我就不玩基础了,很多在我实际生活中使用的东西,我会在文 ...

  4. 开发技术--浅谈python基础知识

    开发|浅谈python基础知识 最近复习一些基础内容,故将Python的基础进行了总结.注意:这篇文章只列出来我觉得重点,并且需要记忆的知识. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对 ...

  5. 浅谈Python时间模块

    浅谈Python时间模块 今天简单总结了一下Python处理时间和日期方面的模块,主要就是datetime.time.calendar三个模块的使用.希望这篇文章对于学习Python的朋友们有所帮助 ...

  6. 浅谈Python在信息学竞赛中的运用及Python的基本用法

    浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...

  7. 浅谈 js 字符串之神奇的转义

    原文:浅谈 js 字符串之神奇的转义 字符串在js里是非常常用的,但是你真的了解它么?翻阅<MDN String>就可以了解它的常见用法了,开门见山的就让你了解了字符串是怎么回事. 'st ...

  8. 浅谈 js 字符串 trim 方法之正则篇

    原文:浅谈 js 字符串 trim 方法之正则篇 关于 trim 其实没啥好说的,无非就是去除首位空格,对于现代浏览器来说只是简单的正则 /^\s+|\s+$/ 就可以搞定了.而且支持中文空格   等 ...

  9. 浅谈 js 字符串 search 方法

    原文:浅谈 js 字符串 search 方法 这是一个很久以前的事情了,好像是安心兄弟在学习js的时候做的练习.具体记不清了,今天就来简单分析下 search 究竟是什么用的. 从字面意思理解,一个是 ...

随机推荐

  1. node:json与csv互转

    [单个文件的转化]   1.安装json2csv模块将json转成csv   jsonToCSV.js var fs = require('fs'); const Json2csvParser = r ...

  2. HDU4630-No Pain No Game(离线,线段树)

    Problem Description Life is a game,and you lose it,so you suicide. But you can not kill yourself bef ...

  3. javaScript实现选中文字提示新浪微博分享的效果

    <!DOCTYPE html> <html xmlns:wb="http://open.weibo.com/wb"> <head> <me ...

  4. C语言库函数,头文件

    参看:https://zhidao.baidu.com/question/328173842.html 该文件包含了的C语言标准库函数的定义 stdlib.h里面定义了五种类型.一些宏和通用工具函数. ...

  5. grep 过滤器基础

    grep是一种文本搜索工具,能使用正则表达式搜索文本,并把匹配的行显示出来. grep 选项 模式 文件 grep "bash" /etc/passwd 将/etc/passwd下 ...

  6. jfreechart,pdf生成组件iText,jasper report报表组件及POI操作excel等在企业软件开发中常遇到的第三方应用

    熟悉WEB Service ,Ajax,DWR,JQuery,iBatis等技术,熟练TOMCAT,IIS,JBoss,WebLogic等服务器 图表组件JFreeChart PDF组件-iText的 ...

  7. spring使用context:property-placeholder载不进属性问题 wangbiglei 发表于1年前 原 spring使用context:property-placeholder载不进属性问题

    https://my.oschina.net/wangbiglei/blog/489583 http://www.cnblogs.com/leftthen/p/5615066.html

  8. Android Warning not all local changes may be shown due to an error

    idea使用svn出现Warning not all local changes may be shown due to an error,如下图所示: 解决方案: 1.File > Setti ...

  9. stm32关于.o的错误

    是因为没有加入官方库的原因,而且编译出错之后不能跳转到那里.

  10. JS错误记录 - getStyle代替offset、任意值运动框

    本次练习错误总结: 1. 改变border的宽度,属性名称不是直接写border,而是borderWidth. 2. 运动函数 -- 清除定时器 -- 开启新的定时器.  不是在新定时器开启之后再清除 ...