>> a=1
>> id(a);id(1)
1844525312
1844525312
>> id(a)==id(1)
True
>> id(a) is id(1)
False
==和 和有什么不一样is?
>> a=1
>> id(a);id(1)
1844525312
1844525312
>> id(a)==id(1)
True
>> id(a) is id(1)
False
==和 和有什么不一样is?
您在这里看到了 Python 整数实习的限制。CPython 实现在内存中保留了一个小int对象池(-5 到 257)并尽可能地重用它们。这就是为什么id(a)和id(1)返回相同的值;两者a和字面量都1指的是同一个对象。但是,该值是一个更大的整数(即 1844525312)。这意味着 Python 可以(并且确实)为andint的返回值分配单独的对象,从而产生您看到的结果。为真,但每个返回代表相同值的单独对象,导致返回假。id(a)id(1)1844525312 == 1844525312id(a)id(1)id(a) is id(1)
请注意,a = 1; id(a) == id(1)Python 本身并不保证 with 为真;它是特定 Python 解释器的实现细节。允许实现总是为每个新用途分配一个新对象,并且允许实现总是尽可能重用现有对象。Python 唯一一次保证id(a) == id(b)对于单独的名称a,并且b如果一个名称直接分配给另一个名称(b = a或a = b)。
== 运算符通过检查是否相等来进行比较:
然而,is 运算符比较身份:
>> id(a)==id(1)
由于 a=1 值是相同的。
但对于
>> id(a) is id(1)
由于 id(a) 和 id(1) 指向不同的对象,所以是假的!希望对您有所帮助。