Python中id()函数的作用与is和==的区别详解

江屿
江屿
发布时间:2026-10-13| 3人浏览过
原创

本文深入解析Python中id()函数的核心作用,指出其返回对象在内存中的唯一地址。通过对比is与==运算符,阐明is用于比较内存地址(对象身份),而==用于比较值相等性。结合CPython实现细节,说明复合类型与基础类型在id变化上的差异,帮助开发者准确理解对象引用机制。

根据Python官方文档的定义,

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.

从上述定义可以得出以下关键点:

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

2、在CPython解释器的实现中,对象的id值直接对应其在内存中的地址。(关于CPython解释器的更多信息,可参考:http://zh.wikipedia.org/wiki/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)   #15760464 

此外,在使用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用于比较内存地址(即对象身份是否相同),而==用于比较对象的值是否相等。

总结

以上内容介绍了Python中id()函数的核心概念及其与is、==运算符的关系,希望能帮助读者更好地理解Python的对象机制。如有任何疑问,欢迎留言交流,小编会及时回复。感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。