Python id() 函数详解:内存地址、对象标识与 is 运算符的区别

程一诺
程一诺
发布时间:2026-10-14 | 2人浏览过
原创

本文深入解析Python中id()函数的核心作用,即返回对象的唯一内存地址。通过对比复合类型与基础类型的id变化,阐明is运算符基于内存地址比较而==基于值比较的本质差异,帮助开发者理解对象生命周期与内存管理。

Python id() 函数核心概念

在Python官方文档中,对id()函数的定义如下:


id(object)
Return the “identity” of an object. This is an integer (or long integer) which is guaranteed to be 
unique and 
constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the 
same?id()?value.
CPython implementation detail:?This is the address of the object in memory.

通过上述定义,我们可以得出以下关键结论:

首先,id(object)返回的是对象的“身份证号”,该值在对象生命周期内唯一且恒定,但在不同生命周期中,不同对象可能拥有相同的id值。这里提到的“对象”通常指复合类型(如自定义类、列表等);而对于字符串、整数等基础类型,变量的id值会随其内容的改变而发生变化。

其次,在CPython解释器中,一个对象的id值直接对应其在内存中的存储地址。(注:CPython是Python的一种主要实现方式,详见CPython维基百科)


class Obj():
  def __init__(self,arg):
    self.x=arg
if __name__ == '__main__':

  obj=Obj(1)
  print id(obj)    #32754432
  obj.x=2
  print id(obj)    #32754432
   
  s="abc"
  print id(s)     #140190448953184
  s="bcd"
  print id(s)     #32809848
   
  x=1
  print id(x)     #15760488
  x=2
  print id(x)

此外,在使用is运算符判断两个对象是否为同一对象时,依据正是这个id值。


class Obj():
  def __init__(self,arg):
    self.x=arg
  def __eq__(self,other):
    return self.x==other.x
   
if __name__ == '__main__':
  
  obj1=Obj(1)
  obj2=Obj(1)
  print obj1 is obj2 #False
  print obj1 == obj2 #True
   
  lst1=[1]
  lst2=[1]
  print lst1 is lst2 #False
  print lst1 == lst2 #True
   
  s1='abc'
  s2='abc'
  print s1 is s2   #True
  print s1 == s2   #True
   
  a=2
  b=1+1
  print a is b    #True
   
  a = 19998989890
  b = 19998989889 +1
  print a is b    #False

is与==的核心区别在于:is用于比较内存地址(即是否为同一个对象),而==用于比较对象的值是否相等。

id() 函数语法与返回值详解

以下是关于Python id()函数的详细知识扩展:

Python id() 函数

功能描述

id() 函数用于返回对象的唯一标识符,该标识符为一个整数。

在CPython实现中,id() 函数专门用于获取对象的内存地址。

语法格式

id() 函数的标准调用语法如下:


id([object])

参数说明:

object -- 需要获取标识符的目标对象。

返回值说明

函数返回该对象的内存地址(整数形式)。

代码示例

以下实例展示了 id() 函数的具体使用方法:


>>>a = 'runoob'
>>> id(a)
4531887632
>>> b = 1
>>> id(b)
140588731085608

至此,关于Python id()函数的介绍已完毕。如需了解更多Python中id函数的相关内容,建议查阅本站历史文章或继续浏览后续教程。感谢大家的支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表