Python:檢查對象使用內存的情況

sys.getsizeof()

1. 使用sys模塊的getsizeof方法來檢查對象使用內存的情況
# 使用前先導入模塊sys
import sys

lt = [1, 2, 3]
sys.getsizeof(a)
2. 我們接下來用這個方法來比較一個range對象, 生成器和list的內存佔用情況。

第一步:先準備三個對象

# 生成一個range對象
In [2]: my_range_list = range(10000)                                            
# 使用列表推導式生成一個列表
In [3]: my_real_list = [i for i in range(10000)]                                
# 將列表表達式的[]換成()能夠得到一個生成器
In [4]: my_generator_list = (i for i in range(10000))                           

第二步:打印內存佔用情況

In [5]: import sys    
# 通過sys.getsizeof來檢查三個對象的內存使用狀況
In [6]: sys.getsizeof(my_real_list)                                             
Out[6]: 87624

In [7]: sys.getsizeof(my_generator_list)                                        
Out[7]: 120

In [8]: sys.getsizeof(my_range_list)                                            
Out[8]: 48

分析:
range 類型相比常規 list 或 tuple 的優勢在於一個 range 對象總是佔用固定數量的(較小)內存,不論其所表示的範圍有多大(因爲它只保存了 start, stop 和 step 值,並會根據需要計算具體單項或子範圍的值)

>>>my_range_list = range(1000)
>>>my_range_list1 = range(1000000)    
                                     
>>>sys.getsizeof(my_range_list1) 
48
>>>sys.getsizeof(my_range_list1)                               
48

同樣的,生成器的佔用內存也是固定的(較小),原理和range對象是同樣的,它保存的是產生元素的計算過程。

列表推導式則產生的是實際佔用內存的列表,列表的所有元素都會在內存中。

在使用內存方面,range 和 生成器 遠比實際的數字列表更加高效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章