理解python字典内存分配

问题描述

我正在尝试了解在删除键并向其添加新键时为字典分配多少内存以用于以下示例。 (因为这是一个很长的程序,我已经分成几个部分 - 如果你觉得不可读,欢迎编辑问题)

示例:

d = {
    "one": 1,"two": 2,"three": 3
}

import sys
def get_size(obj):
    return sys.getsizeof(obj)

#section 1
print("d - without modification: ")
print(d)
print(get_size(d))

#section 2
print("d - after deletion of two: ")
del d["two"]
print(d)
print(get_size(d))

#section 3
print("d - after adding two_copy key: ")
d["two_copy"] = 2
print(d)
print(get_size(d))

#section 4
print("d - after adding few values modification: ")
d["three_copy"] = 3
d["four"] = 4
print(d)
print(get_size(d))

#section 5
import copy
d1 = copy.deepcopy(d)
print("d1 - after deepcopy of d: ")
print(d1)
print(get_size(d1))

输出

d - without modification: 
{'two': 2,'three': 3,'one': 1}
288

d - after deletion of two: 
{'three': 3,'one': 1}
288

d - after adding two_copy key: 
{'two_copy': 2,'one': 1}
288

d - after adding few values modification: 
{'two_copy': 2,'three_copy': 3,'four': 4,'one': 1}
288

d1 - after deepcopy of d: 
{'two_copy': 2,'one': 1,'three_copy': 3}
288

在上面的例子中,section 1 是我们以前看到的正常情况。 对于 section 2为什么这里的大小与从字典中删除键之前的大小相同?。 当我们向 section 3 添加新键时,它保持相同的大小。但是为什么在同一个字典中再添加两个新键不会增加它的大小?section 4 上。

当我在 section 4添加新键时,section 4 and section 5 的大小会返回不同的值,

print("d - after adding few values modification: ")
d["three_copy"] = 3
d["four"] = 4
d["five"] = 5    # this is the newly added key
print(d)
print(get_size(d))

第 4 节和第 5 节的输出

d - after adding few values modification: 
{'two_copy': 2,'five': 5,'three': 3}
480
d1 - after deepcopy of d: 
{'two_copy': 2,'three': 3}
480

为什么在同一个程序上再添加一个新密钥后大小会发生变化?

我已将所有问题标记粗体。请任何人帮助我了解引擎盖下发生了什么?谢谢。

您可以运行相同的程序 here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)