首頁  >  文章  >  後端開發  >  為什麼 CPython 中的空元組、集合和清單共享相同的 ID?

為什麼 CPython 中的空元組、集合和清單共享相同的 ID?

Linda Hamilton
Linda Hamilton原創
2024-11-01 05:55:02902瀏覽

Why Do Empty Tuples, Sets, and Lists Share the Same ID in CPython?

為什麼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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn