• 浅谈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)一样,由于这个原因。字符串是能够採用享元模式的。

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


  • 相关阅读:
    等差子序列(sequence)
    威士忌(whiskey)
    图论:2-SAT模板
    poj2723-Get Luffy Out
    acdream1412:2-3 trees 组合数dp
    hdu3849-By Recognizing These Guys, We Find Social Networks Useful:双连通分量
    ZOJ2317-Nice Patterns Strike Back:矩阵快速幂,高精度
    ZOJ3519-Beautiful People:最长上升子序列的变形
    hdu2460-Network:边的双连通分量
    hdu4405:概率dp
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5076940.html
Copyright © 2020-2023  润新知