本文將介紹Python內置函數中,在開發中查看對象內存的相關函數。
一、id()函數
id()函數是Python內置函數,用於返回對象的唯一標識符,也就是對象在內存中的地址。
num = 10
print(id(num))
輸出結果:
140716657924880
在上面的例子中,我們定義了一個Python整型對象num,然後調用id()函數返回num對象在內存中的地址。
在Python中,同一個對象的地址是不會改變的,因此通過id()函數來查看對象的地址在調試中是非常有用的。
二、sys.getsizeof()函數
sys.getsizeof()函數是Python標準庫中的函數,用於返回對象在內存中佔用的位元組數。
import sys
list_ = [1,2,3,4,5]
print(sys.getsizeof(list_))
輸出結果:
104
在上面的例子中,我們定義了一個Python列表對象list_,然後調用sys.getsizeof()函數來返回對象在內存中佔用的位元組數。
對比其他語言,Python中的列表具有動態性,會隨着列表元素的增多,動態擴展空間,因此佔用的位元組數也會相應增加。
三、命令行工具——objgraph庫
objgraph庫是Python第三方庫之一,用於可視化Python對象和其關係。
首先,我們需要通過pip安裝該庫:
pip install objgraph
下面是一個簡單的例子:
import objgraph
x = []
y = [x, [x], dict(x=x)]
objgraph.show_refs([y], filename='sample-graph.png')
輸出結果:
在上面的例子中,我們定義了Python列表對象x和y,並將x作為y的元素和字典的值。
然後通過objgraph.show_refs()函數,生成了一個可視化對象的關係圖,並輸出為sample-graph.png文件。
該圖展示了Python對象之間的引用關係,非常適合在內存泄漏等問題的調試中使用。
四、命令行工具——pympler庫
pympler庫是Python第三方庫之一,用於細粒度監測Python內存。
首先,我們需要通過pip安裝該庫:
pip install pympler
下面是一個簡單的例子:
from pympler import tracker
tr = tracker.SummaryTracker()
x = []
print(tr.print_diff())
y = [x, [x], dict(x=x)]
print(tr.print_diff())
輸出結果:
types | # objects | total size
============================================= | =========== | ============
| 1 | 56
| 2 | 88
| 1 | 72
在上面的例子中,我們使用pympler庫中的tracker.SummaryTracker()函數對Python內存進行監測。
首先,我們定義了Python列表對象x,並打印輸出內存變化;然後我們定義了Python列表對象y,其中包含了對象x,並打印輸出內存變化。
通過打印輸出的變化,我們可以清晰的看到內存所佔用的大小以及變化。
五、小結
本文介紹了Python內置函數和第三方庫中,用於查看Python對象內存的相關函數。
id()函數可以用於查看對象的地址,在調試時非常有用;
sys.getsizeof()函數可以用於查看對象所佔用的位元組數,便於優化內存使用;
objgraph庫可以用於可視化對象關係,便於調試內存泄漏等問題;
pympler庫可以用於細粒度監測Python內存,便於查看內存大小和變化。
原創文章,作者:FLGBF,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/373831.html