微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

理解python字典内存分配

如何解决理解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 举报,一经查实,本站将立刻删除。