為什麼CPython 中的空元組、集合和列表的ID 保持不變
CPython 中,空元組、集合和列表意外地共用相同的ID。這與可變物件的行為相反,可變物件的每個實例都有一個唯一的 ID。
這種行為的原因在於 CPython 的記憶體分配器。當Python解釋器創建一個空元組或列表時,它會分配一小塊記憶體。然後 id 函數傳回該記憶體區塊的位址,這對於所有空元組或列表都是相同的。
雖然字典也是可變的,但它們的行為有所不同,因為它們需要更多記憶體。建立新的空字典時,會分配一個唯一的記憶體區塊,並且 id 函數會傳回該區塊的位址。
為了說明這個概念,讓我們執行顯示空元組ID 一致性的Python 代碼,以及列表:
<code class="python">tuple1 = () tuple2 = () id1 = id(tuple1) id2 = id(tuple2) print(id1 == id2) # Output: True</code>
這表明多個空元組具有相同的ID,即使它們是單獨的對象。
此外,空集或列表的 ID 即使在將其分配給變量,然後調用 id()。這是因為初始的空物件仍然存在,並且具有相同的記憶體位置。
綜上所述,CPython 中物件的 ID 僅在該物件的生命週期內是唯一的。一旦物件被銷毀,同一個記憶體區塊可以重複用於不同的對象,從而導致重複的 ID。
以上是為什麼 CPython 中的空元組、集合和清單共享相同的 ID?的詳細內容。更多資訊請關注PHP中文網其他相關文章!