您现在的位置是:主页 > news > 深圳信科网站建设/百度企业查询
深圳信科网站建设/百度企业查询
admin2025/6/30 1:20:54【news】
简介深圳信科网站建设,百度企业查询,做名宿比较好的网站,建设网站需要虚拟空间今天要跟大家细细地聊一聊我们并不陌生的is,也必须提一下它的同胞兄弟,首先我们来看下它们的区别所在。如下代码: In [1]: a 300In [2]: b 300In [3]: a b Out[3]: TrueIn [4]: a is b Out[4]: FalseIn [5]: id(a) Out[5]: 2752357526928…
今天要跟大家细细地聊一聊我们并不陌生的is
,也必须提一下它的同胞兄弟==
,首先我们来看下它们的区别所在。如下代码:
In [1]: a = 300In [2]: b = 300In [3]: a == b
Out[3]: TrueIn [4]: a is b
Out[4]: FalseIn [5]: id(a)
Out[5]: 2752357526928In [6]: id(b)
Out[6]: 2752357525104
由以上代码可以发现:
is
运算符检查两个运算对象是否引用自同一对象(也就是对象的id()
是否一致)==
运算符比较两个运算对象的值是否相等
但是此时,我们再来看一段代码:
In [7]: c = 256In [8]: d = 256In [9]: c is d
Out[9]: TrueIn [10]: c == d
Out[10]: True
OMG,为什么 c is d
返回为 True
呢?emmmm…这就得好好的来说说 Python 的小整数对象池了。
首先,我们必须理解,在 Python 中,如果进行a = 300
时 Python 解释器主要做了以下事情:
- 在内存中创建了一个 300 的整数对象
- 在内存中创建了一个名为 a 的变量,并将 a 指向了 300
很显然的就是,每进行这样一个操作都会有内存的开辟以及销毁~如此反反复复就有问题。所以,为了缓解这个问题,当我们启动 Python 的时候,数值为 -5 到 256 这些常用数值的对象就已经被分配好了固定的内存对象,当我们使用它的时候,只是一个引用。也就是说,256 是一个已经存在的对象,而 300 并不是。
but…又需要注意一个问题,当不在小整数对象池范围内的数值在同一行中使用相同的值初始化时,会指向同一个对象。如下代码所示:
In [11]: e, f = 305, 305In [12]: id(e)
Out[12]: 2752357525552In [13]: id(f)
Out[13]: 2752357525552In [14]: e is f
Out[14]: True
这是因为 e,f 在同一行中被设置为 305 时,Python 解释器会创建一个新对象,然后同时引用第二个变量。但是如果是不同的行上进行,它就不会知道已经存在一个 305 的对象了。
这就让我想到了之前有几位朋友问过我的一个问题,为什么在命令行中执行 a 与 b 它们两并不引自同一个对象。但是,在 Pycharm 中,奥哟好像,a 与 b 又是引自的同一对象呀~代码如下:
a = 305
b = 305print(id(a))
print(id(b))-------------------------------------------------
D:\lmj\python3.6.4\python.exe E:/highCode/test.py
2868245081808
2868245081808
这是为什么呢?这是因为 Pycharm 在每次运行的时候是所有代码都载入到内存中,是一个整体执行。所以,此时又会有一个大整数对象池(除小整数池以外的数),也就是处于一个代码块的相同的大整数都是同一个对象。So,a 与 b 在 Pycharm 中执行时是引自的同一对象。
看到这里大家应该比较清晰了吧!有问题也可以留言呀~包括想看更多关于Python的有趣文章可以关注我的公众号奥!康桑思密达