无名 发表于 2022-5-8 18:32:33

【HC】Python 的常量池

对于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这是因为整个文件是同时被编译的。
http://cdn.u1.huluxia.com/g3/M01/7D/CA/wKgBOV3xoLmAdnSSAAFAIevZ-vc875.jpg
页: [1]
查看完整版本: 【HC】Python 的常量池