顯然刪除字典中的條目不會觸發任何調整大小。只有在添加條目後纔會觸發調整大小。爲什麼字典沒有在刪除後調整大小?
這可以從下面可以看出:
# Drastic example, nobody does such
# things with dicts FWIK
from sys import getsizeof
d = {i:i for i in range(100)}
print(getsizeof(d)) # 4704
for i in range(100):
del d[i] # similarly with pop
print(getsizeof(d)) # 4704
d[0] = 1 # triggers resize
以及來自a question on SO(從我所發現的)。 set
以類似的方式表現出來,預計這將符合什麼樣的標準。另一方面,當新大小變成已分配的一半時,調整大小;這是在list_resize
comment說:
/* Bypass realloc() when a previous overallocation is large enough
to accommodate the newsize. If the newsize falls lower than half
the allocated size, then proceed with the realloc() to shrink the list.
*/
爲什麼是它的字典(並間接套)不採用類似的技巧,而是等待一個新條目被插入?描述的行爲適用於Python 2.7和3.x(直到Python 3.7.0a0)。
哪個版本?所有? –
@cᴏʟᴅsᴘᴇᴇᴅ是。這就是爲什麼我沒有添加任何特定於版本的標籤。 :-) –
'd.clear()'確實調整了大小,儘管 –