2014-10-05 55 views
1

這個想法是從this reference爲什麼python無法確定根目錄並使用標記掃描?

由於擴展模塊的工作方式,Python無法完全確定根集。

在我的理解中,Python解釋器的操作與JVM類似,但可能更抽象。那麼目前有執行框架,爲什麼根不能在那裏確定?就C擴展模塊而言,爲什麼不把它放在一邊,讓它自己管理內存呢?

另一個有趣的一點是,

首先,我們觀察到,參考週期只能通過容器對象來創建。

無法創建兩個自定義類並使它們互相引用?我想了一下,似乎不是直接構造一個,但如何證明我們不能通過一些構造構造來構造這個場景?

回答

1

擴展模塊一直處理原始對象指針(PyObject *),其中一些將指針存儲在最奇怪的位置(static變量,自定義非Python數據結構,作爲某個其他庫事件的回調的有效載荷數據系統等),所以它不僅僅是需要檢查的當前堆棧幀的局部。甚至掃描堆棧也需要特定於平臺的組裝魔術,就像您提到的那個頁面一樣。

可以設計一個擴展API來明確地傳達所有這些指針,但對於二十年前出貨的CPython,如果它曾經是一個開始的選項(對於許多人認爲是一個很大的麻煩次要好處)。

無法創建兩個自定義類並使它們互相引用?

請繼續閱讀。這裏「容器」的使用範圍較廣:

這些是可以保存對其他對象的引用的對象。在Python列表中,字典,實例,類和元組都是容器對象的示例。整數和字符串不是容器。