我了解Python列表本质上是C数组,它们分配一块特定的连续内存块; 但是,这些内存块实际存储列表中的数据还是仅指向存储实际数据的另一个内存位置呢?也许这取决于存储在列表中对象的大小。因为你可以轻松地按顺序存储一系列整数,但如果要动态存储包括自定义对象在内的各种对象,则会更难。
性能注意事项 #
列表对象由两部分组成:一个对象头和一个单独分配的对象引用数组。后者根据需要重新分配。
ls = [] takes 72 bytes
x = '1234567' takes 44 bytes
现在,这个:
[x]
列表包含字符串 x,占用 124 字节(72 + 8 + 44)。
但是,你的问题:
[x, x, x, x, x]
包含字符串 x 5 次的列表占用 156 字节(72 + 5 * 8 + 44)。
在这里非常好地解释了:
https://code.tutsplus.com/tutorials/understand-how-much-memory-your-python-objects-use--cms-25609
int
对象列表。因此,请检查sys.getsizeof(0)
,然后是sys.getsizeof(1)
,最后是sys.getsizeof(10000000000000000)
。 - juanpa.arrivillaga