python为什么 id() 的结果看起来不是唯一的?

发布网友 发布时间:2022-04-24 14:34

我来回答

2个回答

懂视网 时间:2022-04-19 01:42

>>> a = 2.5
>>> b = 2.5
>>> c = b
>>> a is c
False

>>> a = 2
>>> b = 2
>>> c = b
>>> a is c
True

今天在使用is函数的时候去打印a,b分别被赋值为2.5 和2的情况,发现:
>>> a = 2
>>> b = 2
>>> id(a)
21132060
>>> id(b)
21132060
>>> a = 2.5
>>> b = 2.5
>>> id(a)
19622112
>>> id(b)
293214

当a,b为2的时候id相同,而为2.5的时候不同,这种情况在string字符串的时候也会出现,即当很短的a,b赋值很短的字符串的时候,它们的id值相同,而很长的则不会;
之后,可以得到一个简单的结论就是:解释器在对值很小的int和很短的字符串的时候做了一点小优化,只分配了一个对象,让它们id一样了。

热心网友 时间:2022-04-18 22:50

id()返回一个整数,该整数在对象的生命周期内保证是唯一的。因为在CPython中,这是对象的内存地址,所以经常发生在从内存中删除对象之后,下一个新创建的对象被分配在内存中的相同位置。这个例子说明了这一点:

>>>id(1000)
13901272
>>>id(2000)
13901272

这两个id属于之前创建的不同整数对象,并在执行 id() 调用后立即删除。要确保要检查其id的对象仍处于活动状态,请创建对该对象的另一个引用:
>>>a = 1000; b = 2000
>>>id(a)
13901272
>>>id(b)
131296

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com