python函数深入浅出 6.id()函数详解

1,151 阅读2分钟

1.函数名及其来源

id() 函数命名来源于英文单词identification缩写(编号,身份标识)。 用于显示对象的内存地址。

id 函数的例子:

>>>x = 1
>>>id(x)
1799777296  # 这里每个新对象id()获取的值会不一样,同一个对象则是不变的,重新赋值后变量发生改变,id也变

这里要补充另一个相关知识。 我们在python中使用的对象,变量,在没有写入文件时,都是存储于计算机的内存空间中,每个对象都会被分配一个内存地址(可理解为门牌号) id()函数常常用于判断对象是否变化了

2.函数定义源码及其用法拆解

id([object])
  • object -- 对象。
>>> a=2.0 
>>> b=2.0 
>>> id(a) 
524440880 
>>> id(b) 
524440904 
>>> a=2 
>>> b=2 
>>> id(a) 
524425104 
>>> id(b)
524425104

看上面例子可能奇怪,怎么有的id一样,有的id不一样呢。 但是为了提高内存利用效率对于一些简单的对象,如一些数值较小的int对象(明确范围:[-5, 256]) 这些小整数被定义在了这个对象,python采取重用对象内存的办法,如指向a=2,b=2时,由于2作为简单的int类型且数值小,python不会两次为其分配内存,而是只分配一次,然后将a与b同时指向已分配的对象。当数值较大时,id就不一样了。

>>> a=5555
>>> b=5555
>>> a is b
False
>>> id(a)
12464372
>>> id(b)
12464396

用is判断两个对象是否相等时,依据就是这个id值 所以看下面的例子:

>>>a=2
>>>b=2
>>>a is b
True
>>>a=555
>>>b=555
>>>a is b
False

就不难理解了。

那如果不是比较id,而是数值比较,我们用==比较

>>>a=2
>>>b=2
>>>a == b
True
>>>a=555
>>>b=555
>>>a == b
True

3.版本差异

无版本差异

4.学习建议

id()函数是理解对象内存分配机制非常重要的辅助函数,常用判断中is和==的重要区别就源于此。

对基础运行环境有疑问的,推荐参考:python函数深入浅出 0.基础篇