python is 和 == 区别_解忧杂货铺-程序员分店的博客-程序员秘密

技术标签: python  

直接上个栗子

>>>a = 256
>>>b = 256
>>>a is b 
True	
>>>a == b
True

>>>a=257
>>>b=257
>>>a is b
False
>>>a == b
True

两次执行结果,为什么不相同?

  1. is 运算符检查两个运算对象是否引用自同一对象 (即, 它检查两个对象的内存地址是否相同).
  2. == 运算符比较两个运算对象的值是否相等.
    因此,无论a, b取何值,只要值相等,结果就为True
    >>>[] == []
    True
    

为什么a, b>256时,内存地址不一样?

  1. 小整数池
    在python编程中,为了优化程序的执行效率,python使用了一个叫做小整数对象池的东东。由于程序会频繁使用一些整数,有了这个小整数对象池,就会把小整数常驻内存不会被垃圾回收机制处理,避免了频繁地在内存中创建和销毁整数带来的耗费

    小整数对象池,其实就是一个指针数组,该数组的大小为262(257+5),表示的小整数的范围为[-5,257)(包括-5,不包括257),即是说该数组包含了指向这262个小整数的指针

  2. 因此,只要整数数值在[-5, 257)之间, 内存地址都会相等

    >>>a=-5
    >>>b=-5
    >>>a is b
    True
    
  3. 对于字符串,Python也有类似的机制,可以了解一下python字符串驻留机制

下面来看个奇怪的栗子

>>>a=300
>>>b=300
>>>a is b
False

>>>c=300;d=300
>>>c is d
True

>>>id(d)
2445157327408
>>>id(c)
2445157327408

变量abcd的数值都超过了257,理论上各自的内存地址不一样,但为什么cd的内存地址一样?

  1. cd 在同一行中被设置为 300时, Python 解释器会创建一个新对象, 然后同时引用第二个变量. 如果你在不同的行上进行, 它就不会 “知道” 已经存在一个 300对象了.
  2. 这是一种特别为交互式环境做的编译器优化. 当你在实时解释器中输入两行的时候, 他们会单独编译, 因此也会单独进行优化. 如果你在 .py 文件中尝试这个例子, 则不会看到相同的行为, 因为文件是一次性编译的
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_20831785/article/details/106891305

智能推荐

CentOS7 安装mysql8.0.13_centos7 mysql8.0.13_GHower的博客-程序员秘密

一、工具准备1.下载mysql8.0.13版本(这是我安装时使用的版本),下载地址:https://dev.mysql.com/downloads/mysql/ 1.1 1.2 选择和系统位数一致的版本下载2. CentOS 7 系统3.VM Ware144. 将下载的mysql8安装包上传到/home/apps(因个人习惯,所以...

解决rk3288启动SurfaceFlinger 初始化失败问题_mali fb000000.gpu: failed to get gpu_leakage_九霄的爸爸的博客-程序员秘密

最近编译rk3288源码遇到一个奇怪的问题,正常编译使用的Android源码。如果做一些改动之后。再烧录启动失败很是苦恼,主要报下面错误 kernel 失败日志[ 4.088148] EXT4-fs (mmcblk0p12): recovery complete[ 4.088569] EXT4-fs (mmcblk0p12): mounted filesystem with o...

Oracle等待事件分析与AWR和ASH报告_shayuwei的博客-程序员秘密

文章目录1 ASH和AWR1.1 ASH1.1.1 ash占用的内存大小1.2 AWR1.3 等待事件分析1.4 MMON进程与MMNL进程1.4.1 MMON进程1.4.2 MMML进程1.5 SYSAUX表空间1.6 采样频率和保留时间2 生成AWR和ASH报告2.1 生成AWR报告2.2 AWR的主要参数2.3 生成AWR报告2.4 ASH报告主要参数1 ASH和AWR1.1 ASH用...

C# .net source code_楊盛富的博客-程序员秘密

链接:https://pan.baidu.com/s/1GpsvBCZwkkyyy5GC0RMUCQ提取码:0co6链接:https://pan.baidu.com/s/1u1bALBed37sMrM-hKCkPYA提取码:rjm1链接:https://pan.baidu.com/s/1xwURiDfsmnNkF3gIxwYt_Q提取码:8u0q链接:https://pan.baidu.com/s/1Cr34Q5iCZO29FghIqloxSw提取码:dnsa链接:https://pan.b

蓝桥杯 算法提高 道路和航路 Djkstra + 拓扑序_Tizzii的博客-程序员秘密

一、内容问题描述农夫约翰正在针对一个新区域的牛奶配送合同进行研究。他打算分发牛奶到T个城镇(标号为1..T),这些城镇通过R条标号为(1..R)的道路和P条标号为(1..P)的航路相连。每一条公路i或者航路i表示成连接城镇Ai(1<=A_i<=T)和Bi(1<=Bi<=T)代价为Ci。每一条公路,Ci的范围为0<=Ci<=10,000;由于奇怪的运营策略...

Deep cnn-based multi-task learning for open-set recognition解读_appron的博客-程序员秘密

[42]Oza P, Patel V M. Deep cnn-based multi-task learning for open-set recognition[J]. arXiv preprint arXiv:1903.03161, 2019.概述:提出了一种新的基于深度卷积神经网络(CNN)的多任务学习方法,用于开放集的视觉识别。所提出的基于多任务学习的开放集识别(MLOSR)方法包括一个共享的特征提取器网络,以及一个解码器网络和一个分类器网络,分别用于重建和分类。来自解码器网络的重构误差

随便推点

阿赵的MaxScript学习笔记分享十三《导出Obj模型》_阿赵3D的博客-程序员秘密

阿赵的MaxScript学习笔记,第十三篇。这次用MaxScript写一个导出Obj格式模型的完整例子。可以把很多内容整合在一起运用一下。

npm install安装前端依赖,报缺少python环境的解决方法_npm缺少python-程序员秘密

今天使用npm install命令安装一个前端项目的依赖库,发现报错,提示缺少python环境。我根据网上的提示安装了python环境,结果运行npm install依然报同样的错误。后来发现是项目中的node-sass的版本号太旧了,修改项目中的package.json文件,把node-sass的版本号改成最新的即可。...

安装nautilus-open-terminal插件_daydayup的博客-程序员秘密

nautilus-open-terminal很有用的插件--鼠标右键打开终端1.1fedora安装# yum -y install nautilus-open-terminal安装nautilus-open-terminal,注销下X桌面即可ubuntu安装#sudo apt-get install nautilus-open-terminal1.2在用源码包安装时

MVS: A Tutorial-(1)简介_soleillllling的博客-程序员秘密

​1.介绍基于图像的3D重建的目标可以描述为:given a set of photographs of an object or a scene, estimate the most likely 3D shape that explains those photographs, under the assumptions of known materials, viewpoints, and lighting conditions该定义强调了任务的难度:materials, viewpoin

ON UPDATE CASCADE ON DELETE CASCADE_thre3stone的博客-程序员秘密

这是数据库外键定义的一个可选项,用来设置当主键表中的被参考列的数据发生变化时,外键表中响应字段的变换规则的。update 则是主键表中被参考字段的值更新,delete是指在主键表中删除一条记录:on update 和 on delete 后面可以跟的词语有四个no action , set null , set default ,cascadeno action 表示 不做任何操作,set

Centos下KVM实战tar和qemu-img压缩qcow2格式的磁盘文件迁移_qemu-img 压缩_tiging的博客-程序员秘密

压缩办法(推荐方法):qcow2是稀疏格式的文件,直接传会填充0到创建时声明的大小,tar的-S参数用于处理稀疏格式的文件 所以可以使用tar zcvfS apk-7.2.tar.gz apk-7.2.qcow2 apk-7.2.xml压缩办法(正常方法):qemu-img convert -c -O qcow2 /dev/shm/win.qcow2 /home/soft/kvm/ocr.qcow2其中ocr.qcow2是你的目标镜像转换办法(转换即压缩):qemu-img conver

推荐文章

热门文章

相关标签