多個物件的相同ID:Python 的古怪行為
在Python 中,建立多個物件而不為其分配名稱確實會導致它們共享相同的ID。這個明顯的悖論源於這樣一個事實:物件的 ID 僅在其生命週期內是唯一的。
當您建立引用物件的變數(例如 someClass())時,該物件的生命週期從變數的生命週期開始被指派並在超出範圍時結束。在您提供的範例中:
print(someClass()) print(someClass())
兩個 someClass() 呼叫產生兩個對象,但它們都是在同一個 print 呼叫中建立和銷毀的。因此,它們共享相同的生命週期,並且可以具有相同的 ID。
Python 3.3.3 使用引用計數進行垃圾回收進一步強調了這種行為。當物件的引用計數達到零(即沒有變數引用它)時,它就可以被刪除。在我們的範例中,對 someClass() 的第二次呼叫導致第一個物件的參考計數達到零,使其符合立即釋放的條件。
因為要分配的下一個物件被放置在同一記憶體位置作為第一個對象,它最終具有相同的 ID。這解釋了為什麼快速連續多次呼叫同一個類別會導致物件具有相同的 ID。
如果您需要物件的唯一ID,您可以透過將它們明確分配給變數並保留它們來克服這種行為:
a = someClass() b = someClass() print(id(a)) print(id(b))
這裡,a 和b 引用具有不同ID 的單獨對象,即使它們屬於同一類。或者,您可以實作自己的特定於類別的 ID 機制以確保唯一性。
以上是為什麼多個 Python 物件有時會共享相同的 ID?的詳細內容。更多資訊請關注PHP中文網其他相關文章!