python中的is和==区别

1. is和==的区别

python是一种面向对象的语言,python中对象包含三种基本要素:id(返回的是对象的地址)、type(返回的是对象的数据类型)及value(对象的值)。

is和==都可以对两个对象进行比较,而且它们的返回值都是布尔类型。但是它们比较的内容是不同的,不然两个函数的作用就重复了。首先我们来看下例子,从实际操作中来看下二者的区别。

从上面的例子可以得出,is和==比较的对象的内容时不同的,即:is比较的是两个对象的地址值,也就是说两个对象是否为同一个实例对象;而==比较的是对象的值是否相等,其调用了对象的__eq__()方法。

那么怎么才能让两个对象的地址值相等呢,如果想让一个对象ls2 is ls1返回True应该怎么操作呢,我们可以把ls1赋值给ls2,这样ls1和ls2指向的就是同一个内存地址,ls1 == ls2和ls1 is ls2返回的都是True。如下图所示:

上面说到了赋值,那么接下来进一步说明赋值(=)、浅拷贝(copy())和深拷贝(deepcopy())的区别。

2. 赋值(=)、浅拷贝(copy())、深拷贝(deepcopy())的区别

赋值其实就是对对象的直接引用。例子如下:

ls1 = ls赋值引用,ls1和ls都指向同一个对象。内存图如下所示:

                                                  

浅拷贝(copy()):拷贝父对象,不会拷贝对象内部的子对象。例子如下:

但是在上面的例子中看不出子对象父对象关系,那我们用下面这个例子:

dic1 = dic.copy():dic和dic1是独立的对象,但是它们的子对象[1,2,3,4]还是指向统一的对象。内存图如下所示:

                                             

深拷贝(deepcopy()):是copy模块中的方法,完全拷贝了子对象和父对象,例子如下:

dic1 = deepcopy(dic):深度拷贝, dic1完全拷贝了dic父对象及其子对象,两者是完全独立的。内存图如下所示:

                                 

  • 69
    点赞
  • 205
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值