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

2024-05-04 22:29:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

>>> id(5)
5068376

>>> id(5)
5068376

计算表达式5时,将创建标识为5068376的新对象。现在,我希望重复相同的语句将创建另一个新对象,其标识将是唯一的,因为简单地计算表达式不会产生对该对象的任何引用,并且该对象应该被垃圾收集。你知道吗

解释器也不是在重复使用相同的内存地址:

>>> id(6)
5068364

>>> id(5)
5068376

那是什么原因呢?解释器是否进行文本的幕后绑定?你知道吗


Tags: 对象文本id表达式原因语句解释器标识
2条回答

在Python中有一系列小的数字作为单例保存;任何引用都将始终返回相同的对象,并且它们永远不会被垃圾收集。你知道吗

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

257 257

这里有两件事:

  • 小的Python整数(从-5到256,包括-5到256)是内部的;一个文本整数被转换成相同数字的完全相同的对象。对于这些整数,它们的id()是常数。

  • id()仅在对象的生存期内是唯一的;如果第一个对象再次被清除,则可以在以后对另一个对象重用它。您不会将文本存储在任何地方,因此可以再次重用内存地址

    >>> id('foo bar')
    4572936304
    >>> id('bar baz')
    4572936304
    

    这里'foo bar''bar baz'是两个不同的对象,但它们的生命周期并不重叠。第一个是创建的,传递给id()函数,然后再次销毁。然后创建第二个字符串,传递给id(),然后依次销毁。

相关问题 更多 >