列表的存儲本質
首先我們知道int數據類型是占1個字節也就是8位二進制,圖中列表LI里面有4個int數據,那么內存系統是怎么存儲的呢
存儲過程:
1、系統會先開辟一個內存單元起始位置,例如圖中的0x23
2、遍歷每個元素的數據類型繼續開辟相應大小的內存空間
例如途中每個元素都是int類型,所以連續開辟的空間都是一個字節大小
3、為什么計算機數據索引都是從0開始
大家看圖,第一個元素的內存起始位置就是列表的存儲地址,通常我們id(list)得到的就是這個起始地址,然后索引list[index]代表這是從這個起始地址偏移多少元素單元存儲空間
這種連續存儲單元每個的大小都是相同的,叫做連續存儲。
那么問題來了,列表不僅可以存儲int還可以存儲char這兩種數據類型單元字節長度不一致,那么列表又是怎樣建立連續的存儲單元去索引的呢?
對於元素單元存儲大小不一致的情況
實際上對應元素不同的情況,列表先隨機分配建立存儲空間存儲元素,然后建立連續的存儲地址,每個存儲地址又將存儲元素的存儲空間的起始位置記錄下來,
這樣我們們就可以根據連續的存儲地址來找到真實存儲元素的存儲空間的地址