龙空技术网

python中的is和==区别

温水青蛙202306 444

前言:

目前看官们对“pythonis”大体比较关注,我们都需要了解一些“pythonis”的相关内容。那么小编在网上搜集了一些关于“pythonis””的相关内容,希望同学们能喜欢,你们一起来了解一下吧!

笔记记录20221203:

is比较的是两个对象的地址值,也就是说两个对象是否为同一个实例对象;

而==比较的是对象的值是否相等,其调用了对象的__eq__()方法;

# is比较的是两个对象的地址值,也就是说两个对象是否为同一个实例对象;# 而==比较的是对象的值是否相等,其调用了对象的__eq__()方法;# 1,查看区别:"""a和b,str1和str2,li1和li2,值都相同,所以==都为True;但是:a和b,str1和str2,地址都相同,所以 is 都为Trueli1和li2,地址不相同,所以 is 为False原因:Python机制里面,默认会将比较小的值,缓存起来,使用的时候,指向同一个对象地址,节省内存空间"""a = 10b = 10print(a==b) # Trueprint(a is b) # Trueprint(id(a),id(b)) # 1187856280144 1187856280144str1 = '123'str2 = '123'print(str1==str2) # Trueprint(str1 is str2) # Trueprint(id(str1),id(str2)) # 1187858032496 1187858032496li1 = [1,2,3,4]li2 = [1,2,3,4]print(li1==li2) # Trueprint(li1 is li2) # Falseprint(id(li1),id(li2)) # 1187858035456 1187861814912# 2,查看区别:"""=赋值其实就是对对象的直接引用c = a赋值引用,a和c都指向同一个对象,内存地址一致""""""在a和li3变化之前:a==c  a is c  都是True;li3==li4  li3 is li4  都是True;在a和li3变化之后:a==c  a is c  都是False;li3==li4  li3 is li4  都是True;原因:number类型是不可变数据类型,当值发生改变时候,对应的内存地址就会改变;list类型是可变数据类型,当值发生改变时候,对应的内存地址不会发生改变;"""a = 10c = aprint(a==c) # Trueprint(a is c) # Trueprint(id(a),id(c)) # 1187856280144 1187856280144a = 100print('a:',a,'c:',c) # a: 100 c: 10print(a==c) # Falseprint(a is c) # Falseli3 = [1,2,3,4]li4 = li3print(li3==li4) # Trueprint(li3 is li4) # Trueprint(id(li3),id(li4)) # 1187861814976 1187861814976li3.append(5)# li3: [1, 2, 3, 4, 5] li4: [1, 2, 3, 4, 5]# 因为两者指向同一个内存地址,所以li3变化了,li4跟着变化print('li3:',li3,'li4:',li4)print(li3==li4) # Trueprint(li3 is li4) # Trueprint(id(li3),id(li4)) # 1187861814976 1187861814976

标签: #pythonis