Python解释器为什么以及如何记住文字对象

Sha*_*rp3 2 python literals name-binding

我对以下结果感到惊讶,使用Python 2.7.4:

>>> id(5)
5068376

>>> id(5)
5068376
Run Code Online (Sandbox Code Playgroud)

当评估表达式5时,创建一个具有5068376标识的新对象.现在,我希望重复相同的语句将创建另一个新对象,其标识将是唯一的,因为简单地评估表达式不会产生任何对对象和对象的引用应该是垃圾回收.

这并不是解释器重用相同的内存地址:

>>> id(6)
5068364

>>> id(5)
5068376
Run Code Online (Sandbox Code Playgroud)

什么给出了什么?翻译是否对文字进行幕后绑定?

Mar*_*som 5

在Python中有一系列小数字作为单例保存; 任何引用都将返回相同的对象,它们永远不会被垃圾回收.

>>> for x,y in enumerate(range(1000)):
    if x is not y:
        print x,y
        break

257 257
Run Code Online (Sandbox Code Playgroud)

  • @ Sharp3,它是一个实现细节,随时可能更改.你真的不应该关心你是否得到了同一个对象. (4认同)