Python中的id函式到底是什麼?

2021-09-01 09:19:05 字數 1429 閱讀 4356

python官方文件給出的解釋是

id(object)

cpython implementation detail: this is the address of the object in memory.

由此可以看出:

1、id(object)返回的是物件的「身份證號」,唯一且不變,但在不重合的生命週期裡,可能會出現相同的id值。此處所說的物件應該特指復合型別的物件(如類、list等),對於字串、整數等型別,變數的id是隨值的改變而改變的。

2、乙個物件的id值在cpython直譯器裡就代表它在記憶體中的位址。(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=1print id(x) #15760488

x=2print 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=2b=1+1

print a is b #true

a = 19998989890

b = 19998989889 +1

print a is b #false

is與的區別就是,is是記憶體中的比較,而是值的比較

Lambda函式到底是個什麼

lambda函式是指簡單的 片段,通常認為是不值得命名的函式,它不能重複使用,能方便程式設計師使用,增強 可讀性,降低 出錯概率。捕獲列表 引數 返回型別編譯器通常會計算lambda函式的返回型別,所以一般不需要指定返回型別,但少數情況編譯器可能無法判斷返回型別,還是需要指定返回型別。c 定義了許多...

Python函式引數到底是按值還是按引用

本文是python入門到函式遇到的疑惑。下面一段是基礎教程的原文python函式。所有引數 自變數 在python裡都是按引用傳遞。如果你在函式裡修改了引數,那麼在呼叫這個函式的函式裡,原始的引數也被改變了。例如 usr bin python 可寫函式說明 def changeme mylist 修...

Python函式引數到底是按值還是按引用

本文是python入門到函式遇到的疑惑。下面一段是基礎教程的原文python函式。所有引數 自變數 在python裡都是按引用傳遞。如果你在函式裡修改了引數,那麼在呼叫這個函式的函式裡,原始的引數也被改變了。例如 python view plain copy usr bin python 可寫函式說...