python 中 is 和 == 区别

在python中 is 是用来比较两个对象是否为同一个对象,== 是用来比较两个对象内容是否相等。

仔细想来这两个还是用的十分精准生动的。

举个例子:

一行一行说:

定义两个变量a、b都等于1,

判断 a == b,此时判断的是a的值是否和b的值相等,答案是肯定的,所以返回true。

id函数可以打印出来对象在内存中的唯一标识,也就是内存地址。

那么id(a) ==  id(b)呢,由于a与b的值相等,在python中不可变数据类型有:数字、字符串、元祖,不可变的意思是,如果内存中已经有了一个变量值,这个值是不允许改变的,如果改变了就是新建一个对象,对于相同的值在内存中只会有一个,比如上例中的1,在这个对象内部会有一个引用计数器来计算有多少个引用,如上例,有a与b两个引用。所以在判断两个地址的时候,会返回true。

判断id(a) is id(b) 的时候,由于id(a) 是作为一个对象来看待,id(b)也同样作为一个对象来看待,那么这两个对象是不同的。

扩展下:

如果是可变类型的话(列表、字典),是允许有多个相同值存在于内存中的,每个值都是可以改变的,对象内存地址不会变,比如:

定义 a 为一个列表,元素只有一个为 1, b也是如此,

打印a和b的内存地址,可以发现可变类型在内存中,相同值的对象是可以有多个,如上,为两个不同的对象。

起初没有意识到这些,还是感觉python的设计很有意思,耐人寻味。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值