出人意料的is

出人意料的is,第1张

概述在网上有一个很有名的例子(以下例子的环境为Windows10,Python3.9.1):>>>a=256>>>b=256>>>aisbTrue>>>a=257>>>b=257>>>aisbFalse>>>a,b=257,257>>>aisbTrue 当你启动Python的时

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

>>> a = 256>>> b = 256>>> a is bTrue>>> a = 257>>> b = 257>>> a is bFalse>>> a, b = 257, 257>>> a is bTrue

  当你启动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解释器也不知道我们已经创建了一个int对象257,所以解释器又在内存中创建了一个新的int对象。第二个例子是写在py文件中的,Python解释器能清楚的知道,第一行已经创建了int对象123456789,如果后面还有变量的值也等于123456789,会将该变量也指向已经存在的int对象,哪怕中间隔了一行。

 

总结

以上是内存溢出为你收集整理的出人意料的is全部内容,希望文章能够帮你解决出人意料的is所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1188727.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存