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

