python中 ==和is的区别

查看对象的内存地址

  • 使用id(),id(object)函数返回对象在其生命周期内的内存地址

==和is区别

  • ==是比较两个对象的内容是否相等。
  • is是比较两个对象的id值是否相等,也就是比较两个对象是否为同个实例对象,是否指向同一个内存地址。

代码块:一个模块文件,一个函数体,一个类,交互式命令行中的单行代码都是一个代码块

==和is的区别,两对象是int

  • 小整数对象[-5, 256]是在全局解释器内重复使用,不会被GC回收。
  • python内部为了将性能进一步提高,凡是在一个代码块中创建整型对象,如果存在一个值与其相同的对象在该代码块中,那么就直接引用不需要创建,否则创建一个新的对象出来。
  • python 出于对性能的考虑,但凡是不可变对象在同一代码块中有值相同的对象,就不会被创建,而是直接引用已存在的对象。
  1. 例:小整数对象
c = 3
def fun():
	a = 3
	b = 3
	print(a is b)
	print(a is c)
fun()

代码运行结果:
在这里插入图片描述

  1. 例 普通整型对象:
c = 300
def fun():
   a = 300
   b = 300
   print(a is b)
   print(a is c)
fun()

代码运行结果:
在这里插入图片描述

==和is的区别,两对象是str

  • 如果对象str中全是字母或数字时,==和is没有区别;
  • 如果对象str中含有特殊符号时,当两对象在同一代码块中,==和is作用一样;两个对象在不同代码块中,两个对象的值相等时,两个对象使用is时返回False。
    例子:
  1. 对象str中含有特殊符号
c = "zhang@"
def fun():
   a = "zhang@"
   b = "zhang@"
   print(a is b)
   print(a is c)
fun()

代码运行结果:
在这里插入图片描述

  1. 对象str中全是字母
c = "zhang"
def fun():
   a = "zhang"
   b = "zhang"
   print(a is b)
   print(a is c)
fun()

代码运行结果:
在这里插入图片描述

  1. 对象str中含有字母和数字
c = "zhang123"
def fun():
   a = "zhang123"
   b = "zhang123"
   print(a is b)
   print(a is c)
fun()

代码运行结果:
在这里插入图片描述

  1. 字符串中单个*20的对象的内存地址一样
c = "a" * 20
def fun():
   a = "a" * 20
   b = "a" * 20
   print(a is b)
   print(a is c)
fun()

代码运行结果:
在这里插入图片描述

  1. 单个字符*21及以上内存地址不一样 :
c = "a" * 21
def fun():
   a = "a" * 21
   b = "a" * 21
   print(a is b)
   print(a is c)
fun()

代码运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值