python 运算符 is 与 is not 的理解

is 与 is not 的理解

is 是判断两个标识符是不是引用同一个对象, 类似于id(a) = id(b) ,如果引用的是同一个对象则返回 True,否则返回 False

注意python 中id()函数是获取对象的内存地址

is not 是判断两个标识符是不是引用自不同对象, 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。

下面举个例子说下

定义2个列表a和b 如下

a = [1, 2, 3]
b = [1, 2, 3]

打印下a is b 的结果

a = [1, 2, 3]
b = [1, 2, 3]
print(a is b)  # 打印结果为False

说明列表a 和列表b 的内存地址不相同

下面在使用下is not 

a = [1, 2, 3]
b = [1, 2, 3]
print(a is not b)  # 打印结果为True

 

-------------------------------------------------------下面是自己疑惑的知识补充----------------------------------------------------------------------------------------

看到这相比大家已经理解的is 与 is not ,这里我没有使用int 举例子,因为我发现,使用int 的时候与网上说的有些不一样的地方

比如,使用开发工具为pycharm, python 版本为3x

a = 500000
b = 500000
print(a is b)  # 打印结果为True

打印截图

python 运算符 is 与 is not 的理解_第1张图片

 

很多人说int 值有范围大于256 a is b 就返回false ,但是这个50万这个值很大了吧,换是True, 百度了下有人说pycharm 对int值有优化,

那下面使用float 值在看下

a = 3.14
b = 3.14
print(a is b)  # 打印结果为True

打印结果仍然为True,按理说应该为false 来的,

下面是个人参考部分人观点认为 : python 为了性能考虑,对于值相同的不可变对象,都不会重新创建新的地址来存储对象,而对于可变对象,则会重新开辟空间

这样很很容易理解了.

你可能感兴趣的:(Python)