开篇小提示:看完本节课知识点以后,欢迎在评论区留下你的疑问、代码测试结果,大家可以一起交流学习!
一、课程简介
前面我们学习过算术、赋值、比较、逻辑、位、成员运算符,本节课我们学习身份运算符,它是Python专属运算符,用来判断两个对象是不是同一个内存地址、是不是同一个东西。
二、基础概念讲解
1. 什么是身份运算符
身份运算符用于对比两个变量的内存地址,判断二者是不是内存当中同一个对象。
重点区分容易混淆知识点:
==:对比两个变量的值是否相等
is:对比内存地址是否一样,是否为同一个对象
2. 两个身份运算符汇总
运算符 | 名称 | 作用 |
is | 是 | 两个对象内存地址一致返回True,否则False |
is not | 不是 | 两个对象内存地址不一样返回True,一样返回False |
3. 小知识点:id()函数
id(变量) 可以查看对象对应的内存唯一地址数字,是学习身份运算符必备函数。
三、代码实操案例
案例1:整数常量池(小整数缓存机制)
Python会缓存‑5~256范围内的整数,这些数字常驻内存,多个变量赋值同一个小数,内存地址相同。
# 小整数a = 10b = 10print(id(a))print(id(b))print(a is b)print(a == b)# 超出缓存区间的整数x = 1000y = 1000print(id(x))print(id(y))print(x is y)print(x == y)
运行说明:
1. 10属于‑5~256,a、b内存地址相同,is结果为True
2. 1000超出缓存范围,两个独立对象,地址不一样,x is y 返回False,但数值相等 == 返回True
案例2:字符串对象测试
s1 = "hello"s2 = "hello"print(s1 is s2)s3 = "hello world"s4 = "hello" + " world"print(s3 is s4)
案例3:列表(可变对象)重点易错示例
列表属于可变数据类型,就算内容一模一样,也是两块独立内存
list1 = [1,2,3]list2 = [1,2,3]print(list1 == list2) # 值相等 Trueprint(list1 is list2) # 内存地址不同 Falselist3 = list1print(list1 is list3) # 指向同一个内存地址 True
案例4:is‑not 使用示例
num1 = 66num2 = 88print(num1 is not num2)
四、核心特殊知识点总结
1. == 判断数值;is 判断内存地址,二者不可混用
2. 小整数缓存:-5 ~ 256 的整数会被Python缓存复用
3. 不可变类型(int、str、tuple)会触发常量缓存;列表、字典、集合属于可变对象,每次新建都会开辟全新内存
4. 变量赋值传递 a=b,代表两个变量共用同一个内存地址
五、课后练习题(共3题)
习题1(基础)
请写出代码,定义两个变量 a=5,b=5,分别打印id地址、a is b、a == b 的运行结果。
习题2(易错题)
已知 lst1=[2,4,6],lst2=[2,4,6],请问 lst1 is lst2 和 lst1 == lst2 输出结果是什么?说出理由。
习题3(代码实操)
创建变量m = 999,n = 999;打印二者id,并且判断 m is not n 的布尔结果。
本节课的身份运算符和之前的比较运算符很容易搞混,如果你有代码报错、看不懂的地方,可以在评论区留言,一起沟通学习!