In [88]: aa=["a"]
In [89]: getsizeof(aa)
Out[89]: 64
In [90]: hex(id(aa))
Out[90]: '0x24ca6152480'
In [91]: getsizeof(aa[0])
Out[91]: 50
In [92]: hex(id(aa[0]))
Out[92]: '0x24ca2104cf0'
1、getsizeof和id的对像是一样的,也就是说getsizeof获取的不是这个列表以及所有内容在内存中的有效占用空间,而仅仅是这个列表表头的占用空间。

这是表头,即aa,选中的是他的元素表

这里大概就是存储相关指针的一段空间

这是元素aa[0]
In [93]: aa.__iadd__("b")
Out[93]: ['a', 'b']
In [95]: getsizeof(aa)
Out[95]: 96
In [96]: hex(id(aa))
Out[96]: '0x24ca6152480'
In [98]: aa[1]="bb"
In [100]: getsizeof(aa)
Out[100]: 96

指针地址没变,但是长度变了,至于后面多出的长度描述了什么,未知。但第二行标志着有多少个元素,第二行后段仍是元素指针的地址

这里的指针应该是单纯的信息,前后无其他描述信息,靠着上上图中的元素数量索引

第一次增加元素,赋值为b,第二次增加aa[1]的长度,但aa的size未变,aa的size至与元素数量有关,也可能与元素类型有关。
看到列表了,里面有个函数
__sizeof__(self, /)
Return the size of the list in memory, in bytes.
好奇探究,又做了无意义的事!
本文探讨了Python中`getsizeof`和`id`函数的作用,指出`getsizeof`返回的并非列表及其内容的总内存占用,而是列表头部的占用空间。内容展示了列表元素如何通过指针链接,并分析了添加元素时列表大小的变化情况,揭示了Python内存管理的一角。
1万+

被折叠的 条评论
为什么被折叠?



