如何解决为什么相同对象的内存空间分配不同?
我正在试验 Python 如何分配内存,所以发现了类似的问题
Size of list in memory 和 Eli 的描述要好得多。他的回答让我产生了新的疑问,我检查了 1 + [] and [1]
的大小,但正如您在代码片段中看到的那样,它是不同的。如果我没记错内存空间分配应该是一样的。但事实并非如此。任何人都可以帮助我理解吗?
>>> import sys
>>> sys.getsizeof(1)
28
>>> sys.getsizeof([])
64
>>> 28 + 64
92
>>> sys.getsizeof([1])
72
解决方法
列表运行所需的最少信息是什么?
- 某种顶级列表对象,包含对类信息(方法、类型信息等)的引用,以及列表自己的实例数据
- 存储在列表中的实际对象
...这让你得到你期望的大小。但是够了吗?
一个固定大小的列表对象只能跟踪固定数量的列表条目:传统上只有一个(头)或两个(头和尾)。 向列表中添加更多条目并不会改变列表对象本身的大小,因此必须有一些额外的信息:列表元素之间的关系。
可以将这些信息存储在每个对象中(这称为侵入式列表),但它的限制性很强:每个对象一次只能存储在一个列表中。
由于 Python 列表显然不是那样的,我们知道这个额外的信息并不存在于列表元素中,也不能在列表对象中,所以它必须存储在其他地方。这会增加列表的总大小。
注意。我故意使这个论点相当抽象。您可以通过几种不同的方式实现列表,但它们都不能避免元素关系的一些额外存储,即使表示不同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。