python运算符的区别

Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)

代码输出
my_list=['20210105']
print("变量类型",type(my_list))
print("变量地址",id(my_list))
print("变量的值",my_list)
变量类型 <class 'list'>
变量地址 2295910720136
变量的值 ['20210105']

1. is和==的区别

== :比较两个对象的值是否相等,相当于调用_eq_()方法,即a==b等同于a._eq_(b)

is :比较的是对象标识符,用来检测对象的标识符是否一致,即两个对象在内存中的地址是否一致,使用a is b的时候,相当于是id(a)==id(b)

代码1输出1代码2输出2
data_1='20210105'
data_2='20210105'
print('值的判定',data_1==data_2)
print('地址的判定',data_1 is data_2)
值的判定 True
地址的判定 True
data_1='20210105'
data_2='20210206'
print('值的判定',data_1==data_2)
print('地址的判定',data_1 is data_2)
值的判定 False
地址的判定 False

注意,我们可以发现,当变量相同时,值和地址的判定都是True,因为python为相同的比变量分配到相同的空间,而变量不相等时值和地址的判定都是False;

代码1输出1代码2输出2
data_1=['20210105']        #可变变量
data_2=copy.deepcopy(data_1)  #深拷贝
print('值的判定',data_1==data_2)
print('地址的判定',data_1 is data_2)
值的判定 True
地址的判定 False
data_1='20210105'    #不可变变量
data_2=copy.deepcopy(data_1)
print('值的判定',data_1==data_2)
print('地址的判定',data_1 is data_2)
值的判定 True
地址的判定 True

说明:可以看出进行深拷贝后,虽然变量值相等,但变量的地址不同;

注意:进行深拷贝时,如果拷贝内容为可变变量,则进行内容拷贝,如果拷贝内容为非可变变量,则相当于浅拷贝,只是简单的引用,不会开辟新的内存空间;

2.isinstance() 与 type() 区别:

isinstance() 与 type() 区别:

  • type() 不会认为子类是一种父类类型,不考虑继承关系。

  • isinstance() 会认为子类是一种父类类型,考虑继承关系。

如果要判断两个类型是否相同推荐使用 isinstance()。

代码输出
class A:
    pass
class B(A):
    pass
a=A()
b=B()
print(isinstance(a,A))
print(type(a)==A)
print(isinstance(b,A))
print(type(b)==A)
True
True
True
False

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值