python中 is和==区别

is 比较的是两个对象在内存中指向地址是否相同,也就是比较俩对象是否为同一个实例对象。
**==**是比较两个对象的内容是否相等,默认会调用对象的__eq__()方法。

python中可以使用id(obj)来获取对象obj在其生命周期中的内存地址,is其实就是判断两个对象的id是否相等。

不可变对象中:

>>> a = 100
>>> b = 100
>>> a is b
True
>>> a == b
True
>>> c = 1000
>>> d = 1000
>>> c is d
False
>>> c == d
True
>>>

python考虑性能将以些常用的比较小的数已经创建好了存在small_ints 中,这些数范围是[-5, 256]。如果用到这些数,就从这里面取,不再去临时创建新的对象。

a = 100 ;b = 100
python赋值流程为:创建一个变量a,将a指向small_ints中的100;创建一个变量b,将b指向small_ints中的100,所以a和b是一个对象。
c = 1000;d = 1000
python赋值流程为:创建一个变量c,再申请内存放入1000,将c指向1000;再创建一个变量d,再申请内存放入1000,将d指向1000,所以c 和 d指向的地址不一样。

可变对象

>>> a = [1,2,3]
>>> b = a[:]
>>> a is b
False
>>> a[0] is b[0]
True
>>> a = [1,2,3]
>>> b = a
>>> a is b
True

对于可变对象,直接赋值其实是引用的传递,两个对象指向同一个地址。切片赋值只是浅拷贝,切片赋值后列表中的元素并没有重新创建,还是指向同一个元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值