当前位置: 首页 > 编程笔记 >

Python中的id()函数指的什么

松锐藻
2023-03-14
本文向大家介绍Python中的id()函数指的什么,包括了Python中的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值。此处所说的对象应该特指复合类型的对象(如类、list等),对于字符串、整数等类型,变量的id是随值的改变而改变的。

2、一个对象的id值在CPython解释器里就代表它在内存中的地址。(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函数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 问题内容: 我阅读了Python 2文档并注意到该功能: 返回对象的“身份”。这是一个整数(或长整数),在该对象的生存期内,此整数保证是唯一且恒定的。具有不重叠生存期的两个对象可能具有相同的值。 CPython实现细节:这是对象在内存中的地址。 因此,我通过使用列表进行了实验: 函数返回的整数是多少?它与中的内存地址同义吗?如果是这样,为什么整数不对应于数据类型的大小? 在实践中何时使用 问题答案

  • 问题内容: 我已经使用了numpy库中的zip()函数对元组进行排序,现在我有了一个包含所有元组的列表。从那以后,我修改了该列表,现在我想恢复元组,以便可以使用我的数据。我怎样才能做到这一点? 问题答案: lst1, lst2 = zip(*zipped_list) 应该给您解压缩的列表。 解压缩zipped_list对象。然后,它将所有元组从zipped_list对象传递到zip,zip将它们打

  • 一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常类似。我们可以把函数的这个首地址(或称入口地址)赋予一个 指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。这种指针就是 函数指针。 函数指针的定义形式为: returnType (*pointerName)(param list); returnType

  • 我正在使用函数迭代

  • 问题内容: 这可能是普通且琐碎的事情,但我似乎在寻找具体答案时遇到了麻烦。在C#中,有一个委托的概念,它与C ++中的函数指针紧密相关。Java中是否有类似的功能?考虑到指针的缺失,最好的方法是什么?需要明确的是,我们在这里谈论头等舱。 问题答案: 类似函数指针的功能的Java习惯用法是实现接口的匿名类,例如 更新:在Java 8之前的Java版本中,以上是必要的。现在,我们有更好的替代方法,即l

  • 问题内容: 根据文档,a 可以是一个带有两个参数的函数,分别为和,并返回表示模板的字符串值。它将当前元素替换为HTML的内容。替换过程将所有属性和类从旧元素迁移到新元素。 该函数处理转换模板DOM。它包含三个参数,和和函数。该参数已被弃用。它返回一个函数。 似乎a 和a 函数非常相似,可以实现相同的目标。该函数定义的模板和功能修改模板DOM。但是,它可以在函数本身中完成。我看不到为什么要在函数外部