请看这段程序
a = 0
b = 0
while a is b:
a += 1
b += 1
print id(a), a
print id(b), b
猜猜结果,呵呵结果是
13013836 257
13013812 257
原因在这里:
引用
This is really hardcoded limit in the current CPython implementation
The interpreter preallocates numbers from 0 to 256.
大家可以看下intobject.c的有关这部分的源码:
#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
int quick_int_allocs, quick_neg_int_allocs;
#endif
呵呵,一目了然吧.
这边给我们的教训就是判断数字相等不要用 is操作符,哈哈.
分享到:
相关推荐
在C++中,每个运算符都是一个函数,当我们对自定义类型进行运算时,编译器会自动寻找合适的操作符重载函数来执行运算。例如,我们可以为类的实例定义"+"运算符,使得两个实例可以通过"+"相加。 二、操作符重载的...
操作符重载并不创建新的操作符,而是让一个操作符可以处理不同类型的操作数或者执行不同的操作。重载是通过函数实现的,这些函数通常作为类的成员函数或友元函数。例如,我们可以为自定义的复数类重载加法操作符"+...
C++ programming language 中,操作符《和》是非常重要的输入/输出流操作符,这两个操作符经常与 cin 和 cout 配合使用。但是,在编程过程中,开发者可能会遇到《和》操作符的用法错误,例如在 cin 和 cout 中错误地...
* `/` 除法操作符,用于将一个数字信号除以另一个数字信号。 * `MOD` 取模操作符,用于计算两个数字信号的模。 * `REM` 取余操作符,用于计算两个数字信号的余数。 * `` 乘方操作符,用于将一个数字信号提升到某个幂...
2. **赋值操作符**:用于将一个值赋给变量,例如`=`, `+=`, `-=`等。例如: ```java a = b; // 将b的值赋给a a += b; // 等同于 a = a + b ``` 3. **比较操作符**:用于比较两个值,如`==`(等于)、`!=`(不等于)...
以上就是 LINQ 中常用的 27 个操作符的主要功能及其应用场景。这些操作符极大地简化了 .NET 中的数据处理流程,使得开发者能够更加高效地编写代码。通过灵活运用这些操作符,你可以轻松地实现各种复杂的数据操作需求...
操作符重载是面向对象编程中的一个重要概念,它允许程序员为类定义特定的操作符的行为,使得这些操作符能够用于类的对象上。 描述中首先对“类”进行了定义,类可以理解为一系列具有相同属性和行为的数据集合。类在...
此外,`SelectMany`操作符用于将多层嵌套的序列展开为一个单一的序列。在示例中,`SelectMany`结合`from`子句,从每个员工的订单集合中选取订单,将所有订单合并成一个序列。 接下来是限制操作符`Where`,它用于...
这个操作符允许你在多个条件中选择满足其中之一即可。 接下来,我们有`^`操作符,它表示“异或”操作。当且仅当两个布尔值不同时,`^`操作符返回`true`。例如,`true ^ true`返回`false`,而`true ^ false`返回`...
通过这个操作符,用户可以像输入基本数据类型一样输入分数。 ```cpp istream& operator>>(istream& istr, Franction& x) { char ch; cout ; istr >> x.nume >> ch >> x.deno; if (x.deno == 0) {cerr 分母不能为...
比较操作符用于比较两个值,并返回一个布尔结果。这些操作符包括等于(==)、不等于(!=)、小于(<)、大于(>)、小于等于()和大于等于(>=)。例如,`a == b` 检查a是否等于b。 四、逻辑操作符 逻辑操作符包括逻辑与(&&)、...
单目操作符只作用于一个操作数,常见的有: - **逻辑非 (`!`)**: 如果操作数为非零,则结果为0;否则为1。 - **负值 (`-`)**: 改变数值的正负号。 - **正值 (`+`)**: 不改变数值的正负号。 - **取地址 (`&`)**: ...
在C++编程语言中,setw操作符是一个非常有用的流操纵符,可以帮助我们实现格式输出。但是,为了使用setw操作符,我们需要包含iostream头文件。只有包含了iostream头文件,我们才能使用setw操作符来实现格式输出。
在MATLAB这一强大的数学计算与可视化工具中,掌握其丰富的操作符系统对于高效地进行数据分析、算法开发以及科学计算至关重要。以下是对MATLAB中常见操作符的深入解析,旨在为用户提供一个全面的理解框架。 ### 算术...
- EFXL/EFLY: 控制X和Y平面上的有效焦距,尤其在非旋转对称系统中,这两个操作符可以调整中间镜组的焦距。 - POWR: 光焦度,衡量一个表面的聚焦能力,仅适用于标准表面。 - PIMH: 近轴像高,是近轴成像时像平面上...
C++操作符的结合性指的是在多个操作符同时出现时,它们的执行顺序。C++语言中,操作符的结合性有两种: * 左结合性:从左到右执行,例如加法和减法操作符。 * 右结合性:从右到左执行,例如赋值操作符。 操作符的...
对于自定义类型,例如一个计数器类,我们需要重载这两个操作符以实现自增或自减的行为。 5. **注意事项**: - 操作符重载不应改变操作符的语义,即它们应该保留其基本的逻辑意义。 - 不要为了重载而重载,只有当...
)只需要一个操作数,而双目运算符(如+,-,*,/)需要两个操作数。 **操作符重载的注意事项:** 1. **不能创建新的操作符**:C++不允许我们创建新的操作符,只能重载已有的。 2. **不能改变操作符的优先级和结合...
它提供了一个核心类型 Observable,附属类型 (Observer、 Schedulers、 Subjects) 和受 [Array#extras] 启发的操作符 (map、filter、reduce、every, 等等),这些数组操作符可以把异步事件作为集合来处理