2014-06-13 96 views
0
print id ([]) == id([]) 
>>> True 

爲什麼? Because解釋此行爲

id([])創建一個列表,獲取該id,並取消分配列表。第二次圍繞它的 再次創建一個列表,但「放在同一個 的地方」,因爲沒有什麼別的事情發生過。 ID只在 一個對象的生命週期內有效,在這種情況下它的壽命幾乎爲零

所以這裏有什麼區別?

print id ({}) == id([]) 
>>> False 

它不應該是創建一個字典,獲取ID和dealocates的字典,然後創建一個列表並將其放在相同的,因爲沒有什麼改變?

+0

事情得到分配的地方是一個實現細節。我們可以解釋爲什麼事情會以這種方式發生,但不要以這種方式依賴它們,因爲它們可能以不同的方式發生,而不會在實施更改的情況下發出警告。 – user2357112

回答

2

列表和字典不存儲在相同的內存區域,因此它們會從對方獲得不同的ID。兩個數組創建和解除分配後會得到相同的ID,兩個字符也是如此,但是字典不會獲得與數組相同的ID。

>>> print id([]) 
3073720876 
>>> print id([]) 
3073720876 
>>> print id({}) 
3073762412 
>>> print id({}) 
3073762412 
+0

感謝您的澄清。 –

1

你已經擊中了頭部。 它創建了一個dict。後者創建了一個list,解釋這一行爲:

>>> [] == {} 
False 
>>> id([]) == id({}) 
False 
>>> 

>>> id([]) 
4301980664 
>>> id({}) 
4298601328 
>>> 

列表和類型的字典沒有存儲在相同的方式,使兩種不同類型的將不會返回同樣的事情。然而,兩個清單或兩個詞條將返回相同。