zoukankan      html  css  js  c++  java
  • [Python]关键字is和操作符==

    Python中所有类型都通过引用存取, 即便是"基本类型"也不例外, 例如:

    =   1
    =   1


        a 和 b 的值都是等于1, 1以对象存储,内存中只有一个1的实例, 可用如下代码判断:

    id(a)  # 10249792
    id(b)  # 10249792
    id(a)  ==  id(b)  # True


        同样也可用关键字 is:

    is  b  # True


        is 判断两个实例是否是同一个, 即是否是对同一对象的引用. 改方法对tuple 和str 同样适用, 如:

    =   ''
    =   ''
    is  b  # True
    =  ()
    =  ()
    is  b  # True


        以上的类型都是不可变的(可以认为是"常量", 包括int), 形式上像C 中的字符串常量(char* s = 'this is const.')相同. 在C 中, 一个整型变量做自加的操作时是在自己原有空间上的操作, 在Python, 则会创建另一个新的不可变实例, 如下:

    =   1
    id(a) 
    # 10249792
    += 1
    id(a) 
    # 10249780


        当类型是可变的时候, 情况发生了变化:

    =  []
    =  []
    is  b  # False
    ==  b  # True
    =  {}
    =  {}
    is  b  # False
    ==  b  # True


        list 和dict 都是可变类型, 要保证能随时更新, 他们的值(操作符==)可以相等, 但不可能指向同一个实例.
    "is"的作用是判断是否是同一实例, "==" 的作用是取值(我们感兴趣的). 也能从另一角度看出来, 操作符"=="能通过方法__eq__()重载, 也就是允许去比较对象中我们感兴趣的东西. (在C 中, 判断两个东西的同一性实际都是靠取值, 也就是变量或指针的"=="操作; Java中则相反, Java的"=="相当于Python的"is", 对于值的比较Java中用Equal()方法.)
        is 和== 的区别并不限于上面可变和不可变的类型, 如下:

    =   1L
    =   1L
    is  b  # False
    =   1.1
    =   1.1
    is  b  # False
    No programming technique solves all problems.
  • 相关阅读:
    通过在vs中”程序包管理器控制台“的输入命令来实现下载和安装所需版本的Mysql.data和Mysql.Data.Entity.EF6
    ireport使用问题
    mysql数据库迁移到达梦数据库
    Idea配置热部署
    阿里云双12年终钜惠
    移动端弹性布局方案lib-flexible实践
    阿里云服务器2折起
    javascript百度地图使用(根据地名定位、根据经纬度定位)
    js拖拽上传图片
    javascript xml转json
  • 原文地址:https://www.cnblogs.com/androidme/p/3036531.html
Copyright © 2011-2022 走看看