1. 程式人生 > >分析python原始碼(1) list物件空間記憶體問題

分析python原始碼(1) list物件空間記憶體問題

問題引出

觀察list的記憶體 我們發現*10*=所建立的記憶體是不一樣的

解釋:

list是動態長度的,在必要時會重新分配記憶體 這裡的**=是兩個不同的指令,不同的指令導致分配的記憶體不一樣。 a * 10 是將會呼叫list_repeat 內部原始碼 所以a * 10只會申請容納10個元素的空間

*= 會呼叫 list_inplace_repeat 內部原始碼 這裡通過 list_resize 進行擴容 這個是擴容規則。比方你需要7個空間,這個resize大概率會給你申請多餘的比方10個。

另一個例子append重新分配記憶體 b和c一樣,都是list_resize 進行擴容,append會在空間不足時呼叫resize。這個有點類似C++中的vector,申請的空間一般會有預留,會在佔用時進行擴容。

想看底層的話有一本《python原始碼剖析》

最後推薦一下教我的大佬的部落格:棲遲於一丘 有很多關於Python原始碼的知識