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 可寫函式說...