加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python – 嵌套空列表的内存大小

发布时间:2020-12-20 11:56:42 所属栏目:Python 来源:网络整理
导读:可以使用sys.getsizeof获取对象的内存大小. 可以预料,[]的大小小于[[]]的大小.在我的机器上,我得到以下尺寸: sys.getsizeof([])36 sys.getsizeof([[]])40 现在,无论我拥有多少嵌套空列表,我总是得到相同的大小: sys.getsizeof([[[]]])40 sys.getsizeof([[[
可以使用sys.getsizeof获取对象的内存大小.

可以预料,[]的大小小于[[]]的大小.在我的机器上,我得到以下尺寸:

>>> sys.getsizeof([])
36
>>> sys.getsizeof([[]])
40

现在,无论我拥有多少嵌套空列表,我总是得到相同的大小:

>>> sys.getsizeof([[[]]])
40
>>> sys.getsizeof([[[[]]]])
40

嵌套空列表的大小似乎有上边界的原因是什么?

解决方法

大小只是指最外面的对象而不是嵌套的对象.从getsizeof的角度来看,对象大小只是对象的大小加上对象中包含的指针的大小而不是指向的对象.您可以从以下内容中看到:

>>> import sys
>>> sys.getsizeof([])
64
>>> sys.getsizeof([[]])
72
>>> sys.getsizeof([[[]]])
72
>>> sys.getsizeof([[],[]])
80
>>> sys.getsizeof([[[]],[[]]])
80

如果要获得总内存占用量,则需要以递归方式查找对象的大小或使用其他内存分析.

此外,如果您正在编写自己的对象并希望getsizeof正确返回大小,则可以实现自己的__sizeof__方法.例如:

import sys
class mylist:
    def __init__(self,iterable):
        self.data = list(iterable)

    def __sizeof__(self):
        return object.__sizeof__(self) + 
            sum(sys.getsizeof(v) for v in self.__dict__.values()) + 
            sum(sys.getsizeof(item) for item in self.data)

original_data = [[1,2,3],[1,3]]
print(sys.getsizeof(original_data))
foo = mylist(original_data)
print(sys.getsizeof(foo))

结果:

~/code_snippets$python3 sizeof_list.py 
80
336

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读