查找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() 等工具來(lái)測(cè)量 Python 中的內(nèi)存使用情況。
方法 1:使用 Getsizeof() 函數(shù)
可以使用此函數(shù)確定對(duì)象或數(shù)據(jù)結(jié)構(gòu)所需的內(nèi)存量。需要測(cè)量其內(nèi)存大小的對(duì)象是唯一的參數(shù)。任何類型的對(duì)象(包括用戶指定的類和實(shí)例)都可以作為參數(shù)傳遞。
語(yǔ)法
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 是字典的大小。
以下示例說(shuō)明如何創(chuàng)建一個(gè)包含列表和 lambda 函數(shù)以及其他數(shù)據(jù)類型的字典。使用 getsizeof() 函數(shù)生成長(zhǎng)整數(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)存使用情況。
語(yǔ)法
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 是字典的大小。
以下程序說(shuō)明了使用 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)文章
18個(gè)Python入門經(jīng)典必背的程序分享
這篇文章主要為大家介紹了Python入門經(jīng)典必背的18個(gè)程序。注意:這是初學(xué)者要牢記的 18 個(gè)代碼,入門之后就簡(jiǎn)單了,快跟隨小編一起來(lái)學(xué)習(xí)一下吧2023-02-02
python實(shí)現(xiàn)帶聲音的摩斯碼翻譯實(shí)現(xiàn)方法
這篇文章主要介紹了python實(shí)現(xiàn)帶聲音的摩斯碼翻譯實(shí)現(xiàn)方法,涉及pygame模塊操作及摩斯碼實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-05-05
基于Python+Pygame實(shí)現(xiàn)經(jīng)典賽車游戲
這篇文章主要為大家分享了一個(gè)基于Python和Pygame實(shí)現(xiàn)的賽車小游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-04-04
Python實(shí)現(xiàn)對(duì)比兩張圖片并標(biāo)記差異
這篇文章主要為大家詳細(xì)介紹了使用Python對(duì)比兩張CAD圖并標(biāo)記差異的解決方案,文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2025-04-04
Python3實(shí)現(xiàn)的爬蟲爬取數(shù)據(jù)并存入mysql數(shù)據(jù)庫(kù)操作示例
這篇文章主要介紹了Python3實(shí)現(xiàn)的爬蟲爬取數(shù)據(jù)并存入mysql數(shù)據(jù)庫(kù)操作,涉及Python正則爬取數(shù)據(jù)及針對(duì)mysql數(shù)據(jù)庫(kù)的存儲(chǔ)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-06-06
python 運(yùn)用Django 開發(fā)后臺(tái)接口的實(shí)例
今天小編就為大家分享一篇python 運(yùn)用Django 開發(fā)后臺(tái)接口的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
Python?虛擬環(huán)境遷移到其他電腦的實(shí)現(xiàn)
本文主要介紹了Python?虛擬環(huán)境遷移到其他電腦的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
Pandas實(shí)現(xiàn)一列數(shù)據(jù)分隔為兩列
這篇文章主要介紹了Pandas實(shí)現(xiàn)一列數(shù)據(jù)分隔為兩列,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05

