python中的 is 和 ==

news/2025/1/17 5:58:15/文章来源:https://www.cnblogs.com/MyRecords/p/18339101

一前言

环境:win10 python3.10

二 is 和 is not

1 比较对象的identity

is 和 is not 是python的比较运算符,比较运算符除了这两个,还有下图中的这些
image

is 和 is not 比较的是两个对象的是 identity
identity是啥,内置函数id()返回的就是这个东西
image

image

通过上面id函数的解释,现在知道,identity就是对象在内存中内存地址(就cpython而言,也就是我们现在用的python)
在python中万物皆对象,每个对象都存放于内存中的某个特定的地方,这个地方在内存中用内存地址来表示。is 和is not 比较的就是两个变量指向的对象是否是同一个对象

2 特殊情况下的identity

我们知道,同一个类的的不同实例对象,虽然属于同一个类型,但却是不同的对象
比如我们的自定义类,同一个类的不同实例对象
比如我们定义的字符串,自定义的字符串虽然不需要像其它自定义类那样去实例化类来得到一个字符串对象,但这些字符串都属于python内置的str类型,都属于str对象(即字符串),且是不同的对象,哪怕是定义两个内容完全相同的字符串,他们也不是同一个对象
image

上面说的在大部分情况下是成立的,但对于少部分情况(如少部分整数和短字符串等),只要内容相同,他们就是同一个对象
image

这是何故?,这是python为了提高性能,对于部分对象,只要内容相同,在内存中只保留一个对象,也称为intern机制。也就说,对于这部分对象,只要内容相同,不同变量指向的都是同一个对象

这些满足instern机制的特殊对象有

  • None
  • True
  • False
  • 数字-5 to 256
  • 由数字 字母和下划线组成的字符串
  • 不满足inster()机制的字符串,在由instern()函数转化而得到的字符串

    image

三 == 与 !=

这两个比较运算符是判断两个对象的内容是否相同,并不是判断是否是同一个对象
image

四 总结

在判断是否属于同一个对象时用is和is not,一些满足intern机制的对象的比较结果是反常识的
在比较对象的的内容是否相同时用==或!=

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/776845.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 中的 is 和 ==

一前言 环境:win10 python3.10 二 is 和 is not 1 比较对象的identity is 和 is not 是python的比较运算符,比较运算符除了这两个,还有下图中的这些is 和 is not 比较的是两个对象的是 identity identity是啥,内置函数id()返回的就是这个东西通过上面id函数的解释,现在知…

深度学习(学习率)

Pytorch做训练的时候,可以调整训练学习率。 通过调整合适的学习率曲线可以提高模型训练效率和优化模型性能。 各种学习率曲线示例代码如下:import torch import torch.optim as optim import torch.nn as nn import matplotlib.pyplot as plt import numpy as npif __name__ …

程序的链接和装入

程序的链接和装入思考这样一个问题,逻辑地址是在链接时形成的还是在装入时形成的。应该是在链接时就已经形成了逻辑地址,后面的装入确定了物理地址C语言编译的过程 C语言编译分为预处理、编译、汇编和链接四个过程 预处理 预处理用于将所有的#include头文件以及宏定义替换为其…

NewStarCTF WEEK5|WEB 4-复盘

打开题目研究一圈没啥营养价值 下载源码发现好东西if (file_exists($page)) {require_once $page; }else{require_once pages/error_page.php;}活的文件包含 我们直接利用 ?+config-create+/&page=../../../../../usr/local/lib/php/pearcmd&/<?=@eval($_POST[a])…

VS2022+Qt6环境问题汇总

1、安装Qt6时无open source模式只有商业模式Qt账号注册问题,注册时没有选择个人模式,需要重新注册账号 1、无法打开.ui文件扩展-->Qr VS Tool-->OptionsRun in detached windows 选择 True

【攻防技术系列+SQL注入】mysql靶场1.0

墨者靶场(SQL手工注入漏洞测试(MySQL数据库))工具 dirsearch sqlmappython dirsearch.py -u http://<IP>:<端口>/在登录界面,没有账户和密码,也进不去,就在没啥收获的时候,直觉告诉我要打开F12开发者模式,这次信它,就在东点点西点点的时候,我发现了什么。…

mysql数据库查询时用到的分页方法有哪些

在处理数据库查询时,我们经常需要对结果进行分页,以便在用户界面上提供更好的浏览体验。MySQL提供了几种不同的方法来实现这一功能,其中最常见的是使用LIMIT子句。以下是三种使用LIMIT进行分页的基本方法。 一、使用LIMIT子句LIMIT子句用于指定查询结果的最大记录数。它的基…

【攻防技术系列+SQL注入】mysql靶场

墨者靶场(SQL手工注入漏洞测试(MySQL数据库))工具 dirsearch sqlmappython dirsearch.py -u http://<IP>:<端口>/在登录界面,没有账户和密码,也进不去,就在没啥收获的时候,直觉告诉我要打开F12开发者模式,这次信它,就在东点点西点点的时候,我发现了什么。…

从汇编层面看c/c++函数调用过程

函数调用分析 前置知识:全局变量:在函数内部定义的变量 局部变量:在函数外部定义的变量 esp:存储当前函数栈底的地址 ebp:存储当前函数栈顶的地址对于函数形参(实际上):简单:cpu寄存器中 复杂:栈中开空间函数调用机制:局部变量占用的内存是在程序执行过程中“动态”…

算法理论:KMP 学习笔记

\(\text{KMP}\) 笔记! 上次比赛,出题人出了一个 \(\text{KMP}\) 模板,我敲了个 \(\text{SAM}\) 跑了,但是学长给的好题中又有很多 \(\text{KMP}\),于是滚回来恶补字符串基本算法。 \(\text{KMP}\) 是上个寒假学的,为什么最近才完全理解,但 \(\text{KMP}\) 短小精悍,极其…

c/c++函数调用过程(结合汇编指令详细分析)

函数调用分析 前置知识:全局变量:在函数内部定义的变量 局部变量:在函数外部定义的变量 esp:存储当前函数栈底的地址 ebp:存储当前函数栈顶的地址对于函数形参(实际上):简单:cpu寄存器中 复杂:栈中开空间函数调用机制:局部变量占用的内存是在程序执行过程中“动态”…