首页 > 编程语言 >python中的 is 和 ==

python中的 is 和 ==

时间:2024-08-02 22:17:07浏览次数:8  
标签:同一个 python 对象 内存 字符串 identity

一前言

环境: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机制的对象的比较结果是反常识的
在比较对象的的内容是否相同时用==或!=

标签:同一个,python,对象,内存,字符串,identity
From: https://www.cnblogs.com/MyRecords/p/18339101

相关文章

  • Python应用开发——30天学习Streamlit Python包进行APP的构建(23):构建多页面应用程序
    创建动态导航菜单通过st.navigation,可以轻松创建动态导航菜单。您可以在每次重新运行时更改传递给st.navigation的页面集,从而更改与之匹配的导航菜单。这是创建自定义、基于角色的导航菜单的便捷功能。本教程使用st.navigation和st.Page,它们是在Streamlit1.36.0版中......
  • Python数据结构第二天—循环链表、树、二叉搜索树
    双向链表之前学习的单向链表只能从头遍历到尾,过程是单向的,而双向链表既可以从头遍历到尾,也可以从尾遍历到头,它的过程是双向的。既然它是双向的,那么我们要实现一个双向链表,就需要在单向链表的基础上,给每一个结点增加一个向前的引用。双向链表的创建:"""我们要实现的是一......
  • Python学习笔记50:游戏篇之外星人入侵(十一)
    前言本篇文章接着之前的内容,继续对游戏功能进行优化,主要是优化游戏状态以及对应的处理。状态一个游戏包含多种状态,这个状态是一个可以很复杂也可以很简单的内容。条件所限,我们这个游戏的状态就比较简单:未开始游戏中暂停结束我们通过一个字段进行控制,并且将这个字段放置......
  • python——functools
    好的,我们再详细讲解functools模块的常用工具,包括每个API的语法和参数,并特别详细解释lru_cache的工作原理及其缓存机制。functools简介functools模块提供了许多高阶函数和工具,用于操作或返回其他函数,帮助我们更方便地进行函数式编程。1.partial函数partial函数用于固定......
  • Python中类的三种重要装饰器
    Python中类的三种重要装饰器:classmethod、staticmethod和property。这些装饰器用于定义不同类型的方法和属性,能大大增强类的功能和灵活性。一、classmethod装饰器1.什么是classmethod?classmethod装饰器用于将一个方法绑定到类上,而不是实例上。换句话说,通过classm......
  • Python——继承
    一、继承1.什么是继承?继承是一种面向对象编程的机制,允许一个类(子类)从另一个类(父类)继承属性和方法。子类可以扩展或修改父类的功能。2.如何实现继承?在Python中,实现继承非常简单,只需要在定义子类时将父类作为参数传递即可。示例classAnimal:def__init__(self,......
  • 《从零开始:使用Python构建简单Web爬虫》
    前言随着互联网信息的爆炸性增长,如何高效地获取和处理这些数据变得越来越重要。Web爬虫作为一种自动化工具,可以帮助我们快速抓取所需的网页内容。本文将介绍如何使用Python编写一个简单的Web爬虫,并通过实例演示其基本用法。准备工作Python环境:确保你的计算机上已经安装......
  • NewStarCTF WEEK5|WEB pppython?
    对源码进行简单的分析<?php//检查`hint`请求参数是否等于指定的数组值if($_REQUEST['hint']==["your?","mine!","hint!!"]){//如果条件满足,设置响应内容类型为纯文本header("Content-type:text/plain");//执行系统命令`ls/-la`列出......
  • 【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+
    一、项目介绍眼疾识别系统,使用Python作为主要编程语言进行开发,基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法,通过对眼疾图片4种数据集进行训练('白内障','糖尿病性视网膜病变','青光眼','正常'),最终得到一个识别精确度较高的模型。然后使用Django框架开发Web网......
  • Python:第三课:重要API - 集合类
    列表-list可以用来存储内容可变长度可变类型可以不同有序的数据的数据结构。类似于java中的List列表的基本使用:##定义列表l1=[1,2,3,"a","b","c",True,False]##访问列表print(l1[4])print(l1[3:6])print(l1[3:])print(l1[:6])print(l1[-2])##更新列表l1[4......