python中is与==的区别

1.is 是比较内存地址id
2.== 是比较两个变量的值

在Python 3.7.2中测试,其他版本可能结果不同。

对于字符串,测试如下:

a = "123sa123"
b = a  # 与 b = "123sa123" 结果一样
print(id(a))  # 1380015214704
print(id(b))  # 1380015214704

print(id(b) is id(a))  # 返回 False
print(id(b) == id(a))  # 返回 True
print(   b  ==    a)   # 返回 True
print(   b  is    a)   # 返回 True

对于数字,测试如下:

a = 888
b = 888  # b = a 的下面测试结果相同
print("888:",id(a))  # 140716076429968
print(id(b))  # 140716076429968
print(id(b) is id(a))  # 返回 False
print(id(b) == id(a))  # 返回 True
print(   b  ==    a)   # 返回 True
print(   b  is    a)   # 返回 True


a = 5//2  
b = 2
print("数字运算a:", id(a))  # 140716076426096
print("数字b:", id(b))     # 140716076426096
print("id(b) is id(a):", id(b) is id(a))  # 返回 False
print("id(b) == id(a):", id(b) == id(a))  # 返回 True
print("b == a:",   b  ==  a)  # 返回 True
print("b is a:",   b  is  a)  # 返回 True

对于列表

a = ["abc","opp"]
b = ["abc","opp"]  # b = a 的结果不同
print("列表a:", id(a))  # 140716076429968
print("列表b:", id(b))  # 140716076429968
print("id(b) is id(a):", id(b) is id(a))  # 返回 False
print("id(b) == id(a):", id(b) == id(a))  # 返回 False
print("b == a:", b  == a)  # 返回 True
print("b is a:", b  is a)  # 返回 False

# 与b = a 结果不同

b = a
print("列表a:", id(a))  # 2591324877064
print("列表b:", id(b))  # 2591324877064
print("id(b) is id(a):", id(b) is id(a))  # 返回 False
print("id(b) == id(a):", id(b) == id(a))  # 返回 True
print("b == a:", b  == a)  # 返回 True
print("b is a:", b  is a)   # 返回 True

元组

a = ("abc", 123)
b = ("abc", 123)  # b = a 的结果相同
print("元组a:", id(a))  # 2655621982920
print("元组b:", id(b))  # 2655621982920
print("id(b) is id(a):", id(b) is id(a))  # 返回 False
print("id(b) == id(a):", id(b) == id(a))  # 返回 True
print("b == a:",   b  ==  a)  # 返回 True
print("b is a:",   b  is  a)  # 返回 True

字典

a = {"abc":123,"zxc":"asd"}
b = {"abc":123,"zxc":"asd"}  # b = a 的结果不同
print("字典a:", id(a))  # 2924215499512
print("字典b:", id(b))  # 2924215499944
print("id(b) is id(a):", id(b) is id(a))  # 返回 False
print("id(b) == id(a):", id(b) == id(a))  # 返回 False
print("b == a:",   b  ==  a)  # 返回 True
print("b is a:",   b  is  a)  # 返回 False

# 与 b = a 不同

b = a
print("字典a:", id(a))  # 2742193192320
print("字典b:", id(b))  # 2742193192320
print("id(b) is id(a):", id(b) is id(a))  # 返回 False
print("id(b) == id(a):", id(b) == id(a))  # 返回 True
print("b == a:",   b  ==  a)  # 返回 True
print("b is a:",   b  is  a)  # 返回 True

集合

a = (1,33,44,22,"9A")
b = (1,33,44,22,"9A")
print("数字运算a:", id(a))  # 140716076426096
print("数字b:", id(b))     # 140716076426096
print("id(b) is id(a):", id(b) is id(a))  # 返回 False
print("id(b) == id(a):", id(b) == id(a))  # 返回 True
print("b == a:",   b  ==  a)  # 返回 True
print("b is a:",   b  is  a)  # 返回 True

总结:对于可变数据类型(列表、字典),即使变量a与b的值相同,但如果不是通过a,b间相互赋值(a=b),则变量a与变量b的内存地址不同,即id不同,a is b的结果返回为False。

      对于不可变数据类型(数字、字符串、元组、集合)只要变量a与变量b的值相同,不管是直接赋值还是通过变量赋值,则变量a与变量b的内存地址都相同,即id相同,a is b的结果返回为True。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值