【发布时间】:2021-10-10 05:05:32
【问题描述】:
我想知道蟒蛇的记忆。
这是代码:
import sys
list1 = [1]
list2 = [1,2]
list3 = [1,2,3]
list4 = [1,2,3,4]
list5 = [1,2,3,4,5]
list6 = ['1',2,3,4,5,6]
list7 = [1,2,'3','4',5,6,7]
list8 = [1,2,3,'sdsd',5,6,7,8]
list9 = [1,2,3,4,5,6,7,8,9]
print('list1 size is :', sys.getsizeof(list1))
print('list2 size is :', sys.getsizeof(list2))
print('list3 size is :', sys.getsizeof(list3))
print('list4 size is :', sys.getsizeof(list4))
print('list5 size is :', sys.getsizeof(list5))
print('list6 size is :', sys.getsizeof(list6))
print('list7 size is :', sys.getsizeof(list7))
print('list8 size is :', sys.getsizeof(list8))
print('list9 size is :', sys.getsizeof(list9))
这是结果:
list1 size is : 64
list2 size is : 72
list3 size is : 120
list4 size is : 120
list5 size is : 120
list6 size is : 152
list7 size is : 120
list8 size is : 120
list9 size is : 152
我困惑的问题是:
-
为什么
list6大于list7而等于list9? -
为什么是
list3-list5equal tolist7-list8`?
谢谢大家。
【问题讨论】:
-
当我运行这段代码时,我得到了
list6 size is : 104,它们都按预期单调递增 -
见stackoverflow.com/q/63204377/476,它回答了大部分问题。为什么 6 突然变大与预先分配列表的一些内部启发式方法有关。但是,详细讨论这一点有点没有实际意义,因为它甚至可能在 Python 版本和体系结构之间有所不同。如果您真的感兴趣,请查阅源代码。
标签: python list python-internals