Python变量内存占用疑问:numpy列表t的内存计算问题
Python变量内存占用计算问题
为什么sys.getsizeof(t)结果远低于实际值?
sys.getsizeof()只能计算列表容器本身的内存,而列表t里存的是指向每个numpy数组的引用(指针),不是数组的实际数据。64位系统下每个指针占8字节,1000个指针就是8000字节,再加上列表自身的管理开销,就得到了你看到的8856字节——这部分和数组里的实际数据完全无关。
变量t的实际内存占用是多少?
每个np.random.rand(10000)生成的是float64类型的数组,每个元素占8字节:
- 单个数组内存:
10000 * 8 = 80000 字节 ≈78.125 KB - 1000个数组总数据内存:
80000 * 1000 = 80,000,000 字节 ≈76.29 MB
如果加上列表容器本身的8KB左右,总内存约76.3MB。
正确的计算方法
可以遍历列表里的每个numpy数组,用nbytes属性获取单个数组的实际数据大小,再求和加上列表本身的大小:
import sys import numpy as np t = [np.random.rand(10000) for _ in range(1000)] # 计算总内存:列表容器大小 + 所有数组数据大小 total_memory = sys.getsizeof(t) + sum(arr.nbytes for arr in t) # 转换为MB并打印 print(f"总内存占用:{total_memory / (1024 * 1024):.2f} MB")
内容的提问来源于stack exchange,提问作者nop nop
相关产品推荐
相关产品推荐

