我已经读到python列表应该占用64个字节,并且列表中的每个条目应该额外占用8个字节。我决定试试这个。但是,在测试时,我发现这取决于如何将项添加到列表中。为什么sys.getsizeof
for ob1
和obj2
在下面的代码中不一致?你知道吗
import sys
test1 = 'This is a string.'
obj1 = []
obj2 = ['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 's', 't', 'r', 'i', 'n', 'g', '.']
obj3 = list(test1)
for i in range(len(test1)):
obj1.append(test1[i])
print(sys.getsizeof(obj1))
print(obj1)
print(sys.getsizeof(obj2))
print(obj2)
print(sys.getsizeof(obj3))
print(obj3)
>>>264
>>>['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 's', 't', 'r', 'i', 'n', 'g', '.']
>>>200
>>>['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 's', 't', 'r', 'i', 'n', 'g', '.']
>>>264
>>>['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 's', 't', 'r', 'i', 'n', 'g', '.']
obj2
报告我期望的大小(64+8*17=200)。使用append
-函数后的开销是多少?在构建列表后,是否可以以某种方式消除该开销?你知道吗
我已经通读了这个相关的主题,但我认为它们的答案与另一个似乎与熊猫有关的主题不一样。你知道吗
开销是由于Python在
list
中分配了一些额外的“插槽”,以便您能够(例如)append
到列表,而不需要在那里分配新内存和复制旧列表。你知道吗您可以通过在列表中添加一些值来了解这一点:
如您所见,添加到
obj1
是可能的,而obj2
需要分配一个新的“块”。你知道吗这是一个实现细节,但当您动态地增加列表的大小时,行为通常是好的,因为它将减少程序的内存碎片(并提高速度)。你知道吗
相关问题 更多 >
编程相关推荐