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