python 查看对象内存占用和对象形状/长度的方法小结-__size__of,sys.getsizeof(),ndarray.size,ndarray.shape

本文介绍了Python中检查对象内存占用的三种方法:__sizeof__、sys.getsizeof和total_size函数,以及它们之间的区别。同时,阐述了如何通过len()、numpy.shape和numpy.size获取序列长度,特别讨论了对字典和集合的适用性。对于ndarray,其shape和size属性提供了额外的维度信息。
Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

一、如何查看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 对象内存占用 】

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值