当python添加小整数时,幕后会发生什么? [重复]

|                                                                                                                   这个问题已经在这里有了答案:                                                      
已邀请:
Python会以一定数量保留ѭ0pool对象池。当您在该范围内创建一个时,您实际上会获得对已有对象的引用。我怀疑这是出于优化原因。 对于超出该池范围的数字,每当您尝试创建一个新对象时,您似乎都会取回该对象。
$ python
Python 3.2 (r32:88445, Apr 15 2011, 11:09:05) 
[GCC 4.5.2 20110127 (prerelease)] on linux2
Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.
>>> x = 300
>>> id(x)
140570345270544
>>> id(100+200)
140570372179568
>>> id(x*2)
140570345270512
>>> id(600)
140570345270576
资源   PyObject * PyInt_FromLong(长节)   返回值:新参考。创建一个   值为的新整数对象   节日。      目前的实现方式   所有整数对象的数组   当您在-5到256之间的整数时   在该范围内创建一个int   实际上只是返回对   现有对象。所以应该   可以更改1的值。   怀疑Python在   这种情况是不确定的。 :-) 重点矿     
您陷入了一个不常见的陷阱:
id(2 * x + y) == id(300 + x)
expression3ѭ和
300 + x
这两个表达式没有相同的寿命。这意味着Python可以计算左侧,获取其id,然后在计算右侧之前释放整数。当CPython释放一个整数时,它将放置在一个释放的整数列表中,然后在下次需要该整数时将其重新用于另一个整数。因此,即使计算结果差异很大,您的ID也会匹配:
>>> x, y = 100, 40000
>>> id(2 * x + y) == id(300 + x)
True
>>> 2 * x + y, 300 + x
(40200, 400)
    
AFAIK,id与参数的大小无关。它必须返回一个生命周期唯一的标识符,并且如果两个参数不同时存在,则可以为两个不同的参数返回相同的结果。     

要回复问题请先登录注册