首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python -为什么在这种情况下' is‘运算符返回true?

Python -为什么在这种情况下' is‘运算符返回true?
EN

Stack Overflow用户
提问于 2021-10-15 11:31:47
回答 3查看 181关注 0票数 2

我是Python的新手,所以我的问题可能看起来很明显。但根据W3Schools的说法,只有在引用同一对象的情况下,'is‘运算符下的两个变量才相同。所以我的问题是,为什么following返回True?我以为Python为它们创建了两个独立的内存位置?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a = 500
b = 500

print(a == b) # True
print(a is b) # True, why is this true?
EN

回答 3

Stack Overflow用户

发布于 2021-10-15 11:38:05

您确定这对值500有效吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Python 3.8.10 (default, Jun  2 2021, 10:49:15)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 500
>>> b = 500
>>> a is b
False
>>> b = 100
>>> a = 100
>>> a is b
True
>>>

Python中的预分配

在Python中,Python3在启动时会保留一个整数对象数组,范围从-5到256。例如,对于int对象,使用名为NSMALLPOSINTS和NSMALLNEGINTS的marcos:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifndef NSMALLPOSINTS
#define NSMALLPOSINTS           257
#endif
#ifndef NSMALLNEGINTS
#define NSMALLNEGINTS           5
#endif
#if NSMALLNEGINTS + NSMALLPOSINTS > 0
/* References to small integers are saved in this array so that they
   can be shared.
   The integers that are saved are those in the range
   -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
*/
static PyIntObject *small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
#endif
#ifdef COUNT_ALLOCS
Py_ssize_t quick_int_allocs;
Py_ssize_t quick_neg_int_allocs;
#endif

这是什么意思?这意味着当您从-5到256的范围创建int时,您实际上是在引用现有的对象。

参考:https://medium.com/@kjowong/everything-is-an-object-in-python-928f2a7d3e15

票数 4
EN

Stack Overflow用户

发布于 2021-10-15 11:37:25

这通常是一个优化问题。当你改变其中一个值(并占据内存中的2个位置)时,它将被拆分

票数 0
EN

Stack Overflow用户

发布于 2021-10-15 11:39:13

==和is运算符的区别相等运算符(==)比较两个操作数的值并检查值是否相等。而'is‘操作符检查两个操作数是否引用相同的对象(存在于相同的内存位置)

参考:https://www.geeksforgeeks.org/difference-operator-python/#:~:text=The%20Equality%20operator%20(%3D%3D),in%20the%20same%20memory%20location

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69589747

复制
相关文章
在PHP中 为什么in_array(0, ['a', 'b', 'c'])返回true
直观上看,0没有在数组['a', 'b', 'c']中,也不会等于abc这个字符串。
用户9076598
2022/03/02
2.8K0
为什么in_array(0, ['a', 'b', 'c'])返回true
在PHP中,数据会自动转换类型后再进行比较。 这样可能会导致一些费解的现象: in_array(0, ['a', 'b', 'c']) // 返回bool(true),也就相当于数组中有0 array_search(0, ['a', 'b', 'c']) // 返回int(0),也就是第一个值的下标 0 == 'abc' // 返回bool(true),也就相当于相等 这两个表达式都返回true。 直观上看,0没有在数组['a', 'b', 'c']中,也不会等于abc这个字符串。 那怎么会返回tr
wangxl
2018/03/09
1.9K0
为什么1000==1000返回false,100==100返回true?
这可能是个讨论得较多的话题,但是我觉得它很有趣:为什么1000==1000返回false,100==100返回true?
三哥
2018/12/19
1.2K0
面试官:为什么“false == []”和“false == ![]”都返回true?
英文 | https://javascript.plainenglish.io/interviewer-why-do-false-and-false-both-return-true-6e7944220337
winty
2023/01/09
9700
为什么1000 == 1000返回为False,而100 == 100会返回为True?
这是我们今天要讨论的话题,因为我觉得它非常的有趣。 如果你运行如下代码: Integer a = 1000, b = 1000; System.out.println(a == b);//1 Integer c = 100, d = 100; System.out.println(c == d);//2 你会得到以下运行结果: false true 我们知道,如果两个引用指向同一个对象,那么==就成立;反之,如果两个引用指向的不是同一个对象,那么==就不成立,即便两个引用的内容是一样的。因此,结果
顶级程序员
2018/04/26
1.7K0
为什么Python中的None is None is None == True
最近在StackOverflow上看到了一个问题,为什么Python中的None is None is None返回True,看到大家的讨论后对Python中的比较运算有了更深的认识。
杜逸先
2018/06/28
2.3K0
为什么Python中的None is None is None == True
奇怪的Java题:为什么128 == 128返回为false,而127 == 127会返回为true?
奇怪的Java题:为什么128 == 128返回为false,而127 == 127会返回为true? 在回答这个问题之前,我们先来看看int和Integer的对比,一步步揭开问题的答案。 1. i
互扯程序
2019/06/19
2.3K0
小心这个陷阱: 为什么JS中的 every()对空数组总返回 true
JavaScript 语言的核心部分足够大,以至于我们很容易误解其某些部分的工作方式。最近在重构一些使用 every() 方法的代码时,发现实际上并不理解其背后的逻辑。在我的理解中,我认为回调函数必须被调用并返回true , every() 才会返回 true ,但实际上并非如此。对于一个空数组, every() 无论回调函数是什么都会返回 true ,因为那个回调函数从未被调用过。考虑以下情况:
前端小智@大迁世界
2023/09/21
2240
为啥PHP in_array(0,['a', 'b', 'c']) 返回为true?
但是,直观上看, 0并没有包含在['a', 'b', 'c']数组中,也不会等于'abc'这个字符串。那怎么解释上述的返回结果呢?
架构精进之路
2020/08/17
1.6K0
HashMap在并发情况下为什么造成死循环?
这个问题是在面试时常问的几个问题,一般在问这个问题之前会问Hashmap和HashTable的区别?面试者一般会回答:hashtable是线程安全的,hashmap是线程不安全的。
java之旅
2020/03/07
1.8K0
Python 函数为什么会默认返回 None?
Python 有一项默认的做法,很多编程语言都没有——它的所有函数都会有一个返回值,不管你有没有写 return 语句。
Python猫
2020/08/18
2.2K0
为什么会有0欧电阻这种东西?
在我们的印象中,电阻就是起到阻碍电流的作用的。但是0欧电阻?不能阻挡电流的电阻我们要它干什么用?实际上,0欧电阻并不是一开始就出现的,而且大部分0欧电阻——都是贴片电阻。这是和它的用途息息相关的。
MCU起航
2022/03/31
7030
为什么会有0欧电阻这种东西?
Java中 3*0.1 == 0.3 返回值 false ,1*0.3 == 0.3 返回值 true
但是有的计算结果不是的,比如4*0.1结果就是0.4;这个是《二进制浮点数算法》的计算 原因,不深究,记一下就行了。
全栈程序员站长
2022/08/09
1.8K0
【说站】splitlines在python中返回列表
2、返回一个是否包含换行符的列表,如果参数keepends为False,则不包含换行符。
很酷的站长
2022/11/23
2.4K0
Spring事物(@transactional注解)在什么情况下会失效,为什么?
2、加了此注解后每个业务方法执行时,都会开启一个事务,不过都是按照相同的管理机制。
凯哥Java
2022/12/16
6970
在Java中为什么不同的返回类型不算方法重载?
方法重载是指在同一个类中,定义了多个同名方法,但每个方法的参数类型或者是参数个数不同就是方法重载。 比如以下 4 个 method 方法就可以称之为方法重载,如下代码所示:
磊哥
2022/01/20
3.4K0
在Java中为什么不同的返回类型不算方法重载?
还有这种操作?浅析为什么要看源码
前言 很多人都有一个疑惑,为什么面试都喜欢问原理,问源码.但是实际工作根本用不上,也就是大家常说的,面试造火箭,进去拧螺丝.我身边也有不少朋友问过我,我给他们的回答是.如果不看源码,不懂原理,出了问题
java进阶架构师
2019/03/01
5880
还有这种操作?浅析为什么要看源码
JS基础测试: 下列等式返回值是true的是?
规范中提到, 要比较相等性之前,不能将 null 和 undefined 转换成其他任何值,并且规定null 和 undefined 是相等的。
舒克
2019/08/09
2.4K0
如何给3个布尔变量,当其中有2个或者2个以上为true才返回true
给3个boolean变量,a,b,c,当其中有2个或2个以上为true时才返回true?
硬核编程
2020/07/23
1.1K0
点击加载更多

相似问题

为什么QCOMPARE在这种情况下不返回True?

23

为什么在这种情况下==不返回true?

10

为什么在这种情况下bool和not bool都返回true?

241

为什么在这种情况下String.contains()不返回true?

10

为什么模运算符返回true?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文