查找Python中對象使用的內(nèi)存量的兩種方法
計算機系統(tǒng)中的內(nèi)存通常設置為一系列二進制數(shù)字或位。每個字節(jié)都有一個唯一的內(nèi)存位置,可用于讀取或?qū)懭胱止?jié)的值。字節(jié)可以解釋為字符、整數(shù)、浮點數(shù)或其他數(shù)據(jù)類型,用于將數(shù)據(jù)存儲在內(nèi)存中。您可以借助 pympler 內(nèi)置的 sys.getsizeof() 和 asizeof() 等工具來測量 Python 中的內(nèi)存使用情況。
方法 1:使用 Getsizeof() 函數(shù)
可以使用此函數(shù)確定對象或數(shù)據(jù)結(jié)構(gòu)所需的內(nèi)存量。需要測量其內(nèi)存大小的對象是唯一的參數(shù)。任何類型的對象(包括用戶指定的類和實例)都可以作為參數(shù)傳遞。
語法
sys.getsizeof(*objt_name*)
*objt_name* 可以接受任何對象 - 整數(shù)、字符串、函數(shù)等。
該函數(shù)以字節(jié)為單位返回給定對象的大小。
算法
- 導入所需的 sys 模塊。
- 創(chuàng)建一個包含各種數(shù)據(jù)類型的字典,例如字符串、整數(shù)、浮點數(shù)、列表和函數(shù)。
- 創(chuàng)建一個函數(shù),將整數(shù) n 作為輸入并返回從 0 到 n-1 的整數(shù)列表。
- 使用sys.getsizeof() 查找方法 create_nmbr_list 和 my_dictn 的大小。
- 打印值。
時間復雜度 - O(1)
空間復雜度 - O(n),其中 n 是字典的大小。
以下示例說明如何創(chuàng)建一個包含列表和 lambda 函數(shù)以及其他數(shù)據(jù)類型的字典。使用 getsizeof() 函數(shù)生成長整數(shù)列表的函數(shù)。
示例
import sys
# 定義一個包含各種數(shù)據(jù)類型的字典
my_dictn = {
"string": "Tutorials Point",
"integer": 662,
"float": 3.14,
"list": [12, 22, 32, 42, 52],
"function": lambda x: x ** 2
}
# 定義一個創(chuàng)建整數(shù)列表的函數(shù)
def create_nmbr_list(n):
return [i for i in range(n)]
# 使用 sys.getsizeof() 測量字典和函數(shù)的大小
print("Size of dictionary using sys.getsizeof(): ", sys.getsizeof(my_dictn))
print("Size of function using sys.getsizeof(): ", sys.getsizeof(create_nmbr_list))輸出
Size of dictionary using sys.getsizeof(): 232
Size of function using sys.getsizeof(): 144
注意 - 內(nèi)存中項目的大小可能會根據(jù)多種因素而變化,包括其他程序或操作系統(tǒng)當前正在使用的內(nèi)存量。
方法 2:使用 Asizeof( ) 函數(shù)
此函數(shù)由 Pympler 包提供,用于內(nèi)存分析和優(yōu)化。與內(nèi)置的 getsizeof() 函數(shù)不同,asizeof() 會考慮目標對象引用的所有對象的內(nèi)存使用情況。
語法
asizeof(*object_*)
*object_* 可以接受任何對象 - 整數(shù)、字符串、函數(shù)、布爾值等
該函數(shù)以字節(jié)為單位返回給定對象及其引用的大小。
算法
- 導入所需的 pympler.asizeof() 模塊。
- 創(chuàng)建一個名為 my_dict2 的字典,其中包含不同的數(shù)據(jù)類型。
- 創(chuàng)建函數(shù)以生成整數(shù)列表。
- My_dict2 和 create_int_list 的大小可以是使用 asizeof 函數(shù)記錄。
- 使用變量 dictn_size_pympler 和 fnct_size_pympler,打印 my_dict2 和 create_int_list 的大小。
時間復雜度 - O(1)
空間復雜度 - O(n),其中 n 是字典的大小。
以下程序說明了使用 lambda 函數(shù)和其他數(shù)據(jù)類型的字典,使用 asizeof 函數(shù)查找對象使用的內(nèi)存。
示例
from pympler.asizeof import asizeof
# 定義一個包含各種數(shù)據(jù)類型的字典
my_dict2 = {
"string": "Hello Viewers",
"integer": 42,
"float": 3.14,
"list": [1, 2, 3, 4, 5],
"set": {10, 20, 30, 40, 50},
"boolean": True,
"function": lambda x: x ** 2,
}
# 定義一個創(chuàng)建大型整數(shù)列表的函數(shù)
def create_int_list(i):
return [x for x in range(i)]
# 使用 pympler.asizeof() 測量字典和函數(shù)的大小
dictn_size_pympler = asizeof(my_dict2)
fnct_size_pympler = asizeof(create_int_list)
# 打印結(jié)果
print("Size of dictionary using pympler.asizeof: ", dictn_size_pympler)
print("Size of function using pympler.asizeof: ", fnct_size_pympler)輸出
Size of dictionary using pympler.asizeof: 384
Size of function using pympler.asizeof: 152
結(jié)論
Sys.getsizeof() 僅返回項目本身的大小,而 asizeof() 返回對象及其引用的每個對象的大小。因此,asizeof() 可以更清楚地顯示對象的內(nèi)存利用率。
雖然 sys.getsizeof() 僅返回對象本身的大小,但 asizeof() 返回程序已導入和使用的每個模塊的大小。根據(jù)所使用的 Python 版本,sys.getsizeof() 可能會做出不同的反應。
到此這篇關(guān)于查找Python中對象使用的內(nèi)存量的兩種方法的文章就介紹到這了,更多相關(guān)Python查找對象內(nèi)存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VSCode配置python環(huán)境及中文問題解決方法
這篇文章主要介紹了VSCode配置python環(huán)境及中文問題,print打印中文亂碼如何解決這個問題呢,本文給大家?guī)韮煞N方法幫助大家解決這個問題,需要的朋友可以參考下2022-02-02
7個流行的Python強化學習算法及代碼實現(xiàn)詳解
目前流行的強化學習算法包括?Q-learning、SARSA、DDPG、A2C、PPO、DQN?和?TRPO。這些算法已被用于在游戲、機器人和決策制定等各種應用中,本文我們將對其做一個簡單的介紹,感興趣的可以學習一下2023-01-01
python庫geopandas讀取寫入空間數(shù)據(jù)及繪圖實例探索
這篇文章主要為大家介紹了python庫geopandas讀取寫入空間數(shù)據(jù)及繪圖實例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>2024-02-02
TensorFlow實現(xiàn)保存訓練模型為pd文件并恢復
今天小編就為大家分享一篇TensorFlow實現(xiàn)保存訓練模型為pd文件并恢復,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Python使用進程池并發(fā)執(zhí)行SQL語句的操作代碼
Python的進程池是一種并發(fā)工具,它允許我們將任務分發(fā)給一組工作進程,這些進程可以同時運行并共享一個進程池,本文給大家介紹了Python使用進程池并發(fā)執(zhí)行SQL語句的操作代碼,需要的朋友可以參考下2024-10-10
Python實現(xiàn)多智能體協(xié)作的實戰(zhàn)教程
一個 Agent 解決不了的問題,就組一個隊,本文將帶大家使用 Python 從零搭建多智能體協(xié)作系統(tǒng),文中的示例代碼講解詳細,感興趣的小伙伴可以了解下2026-04-04
Python數(shù)據(jù)結(jié)構(gòu)鏈表操作從基礎(chǔ)到高級實例深究
鏈表是一種基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),它由一系列節(jié)點組成,每個節(jié)點都包含數(shù)據(jù)和指向下一個節(jié)點的引用,在Python中,可以使用類來實現(xiàn)鏈表,本文將介紹如何實現(xiàn)鏈表,并提供一些豐富的示例代碼來幫助你更好地理解其原理和應用2023-12-12

