一、如何查看python中的对象内存占用?

  1. 调用python对象内置的obj.__sizeof__属性
  2. python的sys模块的sys.getsizeof(obj)函数
  3. python内置的total_size(obj)函数

上述三种方法的区别详见【   步进-Python 对象内存占用 】

从大小上区分,对于同一个对象,三种方法测量出来的内存占用大小,方法1<=方法2<=方法3。

三种方法返回的数值单位是字节Bytes。

二、如何查看各种python序列/容器的形状/长度是多少?

总体来说,大概有以下几种方法可以尝试:

  1. python内置的len(obj)函数
  2. numpy模块的numpy.shape(obj)函数
  3. numpy模块的numpy.size(obj)函数
  4. ndarray数组内部的ndarray.shape属性
  5. ndarray数组内部的ndarray.size属性

对于第1种方法,只能获取多维对象的第1维的长度,而不能获取更深层的形状。但是,如果实在想用这个函数获取多维对象各个维度的长度,也不是不可以。

import numpy

arr = numpy.array([[1, 2, 3], [1, 2, 3]])

len(arr)
# 2。这是第1维的长度

len(arr[0])
# 3。只要arr的第1维索引不大于1,都会返回第2维的长度。

对于第2、3种方法,需要导入numpy模块。

第2种方法不能用来测试字典、集合的长度,因为结果会返回一个空元组,详见下列代码。

import numpy as np

dict1 = {'a':1,'b':2}
set1 = {1,2,3}

print(np.shape(dict1)) # ()
print(np.shape(set1))  # ()

第3种方法不适合用来测试字典、集合的长度,因为结果和实际有偏差,详见下列代码。

import numpy as np

dict1 = {'a':1,'b':2}
set1 = {1,2,3}

print(np.size(dict1))  # 1
print(np.size(set1))  # 1

因此,字典和集合这种无序容器,建议还是使用len()函数来测量长度吧!


对于第4、5种方法,显然只有ndarray数组才能用,其他对象调用这个属性都会报错。

ndarray.shape返回的是一个元组,显示了各个axis上分别有多少个元素。

ndarray.size返回的是一个数值,表示各个维度上一共加起来有多少个元素。

import numpy as np
f1 = np.arange(9).reshape(3,3)
print(f1.size)  # 9
print(f1.shape)  # (3, 3)

三、参考来源

Python——“元组、列表、字典、数组和矩阵”的大小问题_o_Eagle_o-CSDN博客_python 元组比较大小

【   步进-Python 对象内存占用 】

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐