zoukankan      html  css  js  c++  java
  • 聊聊Python中的is和==

    首先,Python中的is就是判断地址是否相等(相当于Java中的==),Python中的==就是判断数值是否相等(相当于Java中的equals)。

    看个简单的例子:

    a = [1, 2, 3]
    b = [1, 2, 3]
    id(a)
    Out[16]: 2531065911112
    id(b)
    Out[17]: 2531064874824
    a == b
    Out[18]: True
    a is b
    Out[19]: False

    因为地址不同,但是元素是相同的。

    但是会发现一些好玩的东西,比如:

    a = 100
    b = 100
    id(a)
    Out[22]: 140720205396832
    id(b)
    Out[23]: 140720205396832
    a == b
    Out[24]: True
    a is b
    Out[25]: True
    a = 10000
    b = 10000
    id(a)
    Out[29]: 2531066740880
    id(b)
    Out[30]: 2531066741104
    a == b
    Out[31]: True
    a is b
    Out[32]: False

    我们发现上面两个结果竟然不同,怎么回事呢?

    原来是因为Python中整型的复用机制:

    在python的整型对象中,将-5~256(python源码中定义)这些整数对象放于小整数对象池中缓存。

    python中除上述的小整数外其他称为大整数,创建时为其分配空间。

    但创建两个相同的大整数时,会为其分配不同的地址空间。

    同理针对字符串:

    a = 'chenchi'
    b = 'chenchi'
    id(a)
    Out[35]: 2531066870728
    id(b)
    Out[36]: 2531066870728
    a == b
    Out[37]: True
    a is b
    Out[38]: True

    在创建字符串时,python会根据字符串长度判断是否创建字符串对象。在WIN32平台上,最大为2147483647,即2GB,大于该值不会创建字符串对象。

    python字符串对象中,存在intern机制,即共享机制。对于空字符串,python只会在第一次使用时创建,后面使用时只会返回原来创建的对象(类似单例模式)。

    对于应用了intern机制的字符串对象,会直接返回对象的引用。实际使用中,创建两个相同的字符串变量时,地址是相同的。

    参考

    https://blog.csdn.net/qq_33512078/article/details/78357773

  • 相关阅读:
    hdu--2852--树状数组
    hdu--2848--未解决
    二进制与十进制之间蛮好的转换方式
    hdu--2846--字典树<怪我思维不够跳跃>
    hdu--2845--dp
    hdu--2844--多重背包
    hdu--1789--贪心||优先队列
    hdu--1978--记忆化深度搜索||递推
    hdu--2830--任意交换列的矩阵
    hdu--1506--矩阵求和<stack>
  • 原文地址:https://www.cnblogs.com/DarrenChan/p/10347433.html
Copyright © 2011-2022 走看看