[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

转载于:https://www.cnblogs.com/kozii/archive/2008/11/06/1328245.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值