首页 > 编程源码 > Python 的常量池

Python 的常量池

楼主:小亚 [3级] · 2019-12-12 ·  浏览769 · 编程源码 · ID:

对于int类型的数据,Python中的常量池范围是[-5, 257)。以如下两种示例进行说明:a = 256b = int("256")print(id(a), id(b)) #1363708960 1363708960 a = 257b = int("257")print(id(a), id(b)) #2163797257264 2163777964656 a = -5b = int("-5")print(id(a), id(b)) # 1363700608 1363700608 a = -6b = int("-6")print(id(a), id(b)) # 2898080953648 2898059889264或者>>> a = 256>>> b = 256>>> a is bTrue>>>>>> a = 257>>> b = 257>>> a is bFalse>>>我们通过id来查看变量的地址,或者通过is操作符来检查是否指向同一个对象,都可以看到临界值256是一个已存在的对象,但257不是。原因Python启动之后,-5到256之间的整型数值就已经在内存中被分配为了对应的整型对象。如果我们创建了一个-5到256之间的整数,实际上拿到的是一个对于整型对象的引用。但如果使用了257,则会重新在内存中生成一个新的对象,因此内存地址会不同。Bonus还有另一种情况值得注意:>>> a = 257;b = 257>>> a is bTrue>>> a = 257>>> b = 257>>> a is bFalse如果在终端中把对a和b的赋值放在同一行中进行执行,那么Python解释器会先创建一个新的对象,然后同时进行引用,所以得到的二者的内存地址相同。但这种情况只存在于在终端中操作的时候。如果我们在一个py文件中使用将两条赋值语句放在同一行的操作,得到的地址就是相同的。a = 257b = 257print(id(a), id(b))# 1908009594288 1908009594288这是因为整个文件是同时被编译的。

- 版权声明 - 1、本帖所有言论和图片等纯属网友个人意见,与流星社区立场无关;
2、其他单位或个人使用、转载或引用本帖时必须同时征得该帖子作者小亚流星社区的同意;
3、备注原文地址:https://bbs.liuxingw.com/t/19604.html,可忽略第2条;
4、帖子作者需承担一切因本文发表而直接或间接导致的相关责任;
5、如本帖内容或部分内容转载自其它媒体,这并不代表本站赞同其观点和对其真实性负责;
6、如本帖若为资源类,将仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您安装或使用的设备中彻底删除上述内容;
7、如果您喜欢该程序,请支持正版软件,购买注册,可以得到更好的正版服务;
8、如本帖侵犯到任何版权或违法问题,请立即邮件告知我们,我们将及时予以处理。
2条回复 |  最后回复于2019-12-12

【夜未央】墨寒 [2级]

不对,当
a等于257
b等于257时。
pay会先编译然后载入界面进行创建
(胡说八道)
发布于2019-12-12

回复列表

  • 内容加载中...

说点什么...

小亚 [3级]

发布于2019-12-12

回复列表

  • 内容加载中...

说点什么...
登录注册 后才可进行评论
签到
16人签到
已签0天
  • 46634帖子
  • 1936793热点量
  • 184968火热值