1.內存單元和地址python
計算中(程序中)直接使用的數據保存在計算機的內存儲器(簡稱內存)。內存是CPU能夠直接訪問的數據存儲設備。與之對應的是外存儲器,簡稱外存,如磁盤、光盤、磁帶等。保存在外存裏的數據必須先裝入內存,然後CPU才能使用它們。算法
內存的基本結構是線性排列的一批存儲單元。每一個單元的大小相同,能夠保存一個單位大小的數據。具體單元大小可能因計算機的不一樣而有所不一樣。在目前最多見的計算機中,一個單元能夠保存一個字節(8位二進制代碼)的數據。所以存放一個整數或者浮點數,須要連續的幾個單元。例如標準的浮點數須要8個單元。編程
內存單元具備惟一編號,稱爲單元地址,或簡稱地址。單元地址從0開始連續排列,所有可用地址爲從0開始的一個連續的正整數區間,如上圖所示。數據結構
在程序執行中,對內存單元的訪問(存取其中數據)都經過單元的地址進行,所以,要訪問一個單元,必須先掌握其地址。在許多計算機中,一次內存訪問能夠存取若干單元的內容。例如目前常見的64位計算機,一次能夠存取8個字節的數據,也就是說一次操做訪問8個單元的內容。基於地址訪問內存單元是一個O(1)操做,與單元的位置或整個內存的大小無關,這是分析與數據結構有關的算法時的一個基本假設。編程語言
在高級語言層面討論和分析數據結構問題時,人們一般不關心具體的單元大小或地址範圍,只假定所考慮數據保存在內存的某處,並且假定這種訪問是常量時間的。對象
2.對象存儲和管理blog
在python程序運行中,創建對象時須要安排存儲,還有許多與對象存儲和使用有關的管理工做。解釋器的一個專門子系統(稱爲存儲管理系統)負責這些工做。這一工做是自動進行的,編寫程序的人沒必要關心。另外,當一個對象再也不使用時,存儲管理系統也會設法回收其佔用的存儲,以便在未來用於存儲其餘對象。內存
3.對象的訪問(使用)二進制
在編程語言層面,知道了一個對象的標識(內存地址就是一種標識)就能夠直接訪問(使用)它。已知對象標識(不管它是否直接爲對象地址),訪問相應對象的操做能夠直接映射到已知地址訪問內存單元,這種操做能夠在常量時間完成(是O(1)時間操做)。程序
若是被訪問的是一個組合對象,其中包含了一組元素,這些元素被安排在一塊內存區域(一塊連續的元素存儲區)裏,並且每一個元素的存儲量相同。在這種狀況下,能夠給每一個元素一個順序編號(一般爲下標,index)。若是知道了一個組合對象的元素存儲區位置,又知道要訪問的元素的編號,訪問元素也是O(1)時間操做。