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
打印截图
很多人说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 为了性能考虑,对于值相同的不可变对象,都不会重新创建新的地址来存储对象,而对于可变对象,则会重新开辟空间
这样很很容易理解了.