這里不討論具體的實現細節,主要是轉載這篇文章: 順序表的原理與python中的list類型。
原文就不貼過來了,總結一下:
- 確定數據類型的意義在於確定一個數據在內存中占據的空間大小以及如何解釋一段內存的含義;
- 同類型數據在內存中連續存儲時采用固定的偏移量來定位;
- 不同類型數據需要采用元素外置的方式,在順序表里面只存儲外置元素的指針;
- 順序表需要保存【容量】以及【已占用】數據,這個“表頭”可以放在順序表中,也可以分離出來;
- 當順序表的容量不夠或者過多時,會自動擴容或者縮容。
再回到作者的結論:
list有以下幾個特點:
1.元素有位置下標,以索引就可以直接取到元素 --> 連續的存儲空間,以偏移量計算取得元素,不必遍歷所有元素
2.元素無論如何改變,表對象不變,也就是其id不變 --> 分離式結構,表頭和元素內容分開儲存,這樣在更改list時,表對象始終是同一個,只是其指向的地址不同
3.元素可以是任意類型 --> 既要要求是連續存儲,又可以存儲不同類型的數據,那么其用的就是元素外置的方式,存儲的只是地址的引用
4.可以任意添加新元素 --> 要能不斷地添加新元素,其使用了動態擴充的策略