據我所知,python list 是一個動態陣列。因此,當我們達到一定大小時,該串列的容量將自動增加。但問題是,與 c 或 c 的動態陣列不同,即使增加了串列實體的容量,位置也不會改變。為什么會這樣?
我已經使用以下代碼塊對此進行了測驗
l = []
print(l.__sizeof__())
print(id(l))
for i in range(5_000_000):
l.append(i)
print(l.__sizeof__())
print(id(l))
uj5u.com熱心網友回復:
在 CPython(由 python.org 分發的 C 語言撰寫的實作)中,Python 物件永遠不會在記憶體中移動。在串列物件的情況下,實際上分配了兩塊記憶體:所有可變大小 Python 容器物件共有的基本頭結構(包含參考計數、指向型別物件的指標和包含的物件的數量) ),以及用于保存指向所包含 Python 物件的指標的 C 級向量的不同記憶體塊。標頭結構指向該向量。
該向量可以以任意方式更改大小,并且標頭結構將更改為指向其當前位置,但標頭結構永遠不會移動。id()回傳該標頭結構的地址。Python 不公開物件向量的地址。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/481188.html
