其他分享
首页 > 其他分享> > 出人意料的is

出人意料的is

作者:互联网

在网上有一个很有名的例子(以下例子的环境为Windows 10, Python 3.9.1):

>>> a = 256
>>> b = 256
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False
>>> a, b = 257, 257
>>> a is b
True

  当你启动Python 的时候,Python就创建好了数值为 -5256 的小整数池。因为这些数字经常被使用,所以提前准备好,用来避免小整数被频繁的申请和销毁。那为什么a和b两个变量都是257的时候,判断a is b 为什么会出现两种不同的结果呢?

    实际上当多个变量处于同一行的,并且初始化值相同的时候,Python解释器会将这些变量,指向同一个对象(前提条件是对象为不可变类型)。如图:

 


 

上述内容都是交互式环境得到的结果,如果将以下代码写入到py文件中,得到的结果又不太一样。如下代码:

a = 123456789
d = 257
b = 123456789
c = 123456789
print(id(a))
print(id(b))
print(id(c))
print(id(d))
print(a is b)
print(a is c)
print(b is c)

结果如下:

 

 

1936955721200
1936955721200
1936955721200
1936955721232
True
True
True


  结论(前提条件是,对象是不可变类型):

 

标签:解释器,出人意料,Python,id,int,print,257
来源: https://www.cnblogs.com/lizefu/p/14529493.html