Python内存消耗:字典 VS 元组列表
在本文中,我们将看到字典和元组列表中的内存消耗。
dict 与元组列表的内存消耗
字典比元组列表占用更多的空间。与元组列表相比,即使是空字典也会占用很多空间。
示例 1:我们可以清楚地看到,当两者都为空时,两种数据类型的内存消耗之间存在巨大差异。
Python3
import sys
dict = {}
print(dict)
# We will get size of empty dict
print(sys.getsizeof(dict))
t1 = ()
d = list(t1)
print(d)
# We will get size of empty list of tuples
print(sys.getsizeof(d))
Python3
import sys
# for dict
dict = {(1, "G"), (2, "F"), (3, "G")}
print(dict)
print(sys.getsizeof(dict))
# for list of tuples
list1 = (1, 2, 3)
list2 = ("G", "F", "G")
LoT = list(zip(list1, list2))
print(LoT)
print(sys.getsizeof(LoT))
Python3
import sys
# for dict
dict = {}
for i in range(1, 101):
dict[i] = i
print(dict)
print(sys.getsizeof(dict))
# for list of tuples
lst = list(range(1, 101))
print(lst)
print(sys.getsizeof(lst))
输出:
{}
240
[]
64
示例 2:在此示例中,因此 dict 和元组列表中有 3-4 个元素。
Python3
import sys
# for dict
dict = {(1, "G"), (2, "F"), (3, "G")}
print(dict)
print(sys.getsizeof(dict))
# for list of tuples
list1 = (1, 2, 3)
list2 = ("G", "F", "G")
LoT = list(zip(list1, list2))
print(LoT)
print(sys.getsizeof(LoT))
输出:
{(3, 'G'), (1, 'G'), (2, 'F')}
224
[(1, 'G'), (2, 'F'), (3, 'G')]
112
同样,我们可以比较内存消耗在 dict 中为 224 字节,而在元组列表中为 112。
示例 3:让我们考虑 dict 和元组列表中的 1-100 个元素并检查结果。
Python3
import sys
# for dict
dict = {}
for i in range(1, 101):
dict[i] = i
print(dict)
print(sys.getsizeof(dict))
# for list of tuples
lst = list(range(1, 101))
print(lst)
print(sys.getsizeof(lst))
输出:
{1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17, 18: 18, 19: 19, 20: 20, 21: 21, 22: 22, 23: 23, 24: 24, 25: 25, 26: 26, 27: 27, 28: 28, 29: 29, 30: 30, 31: 31, 32: 32, 33: 33, 34: 34, 35: 35, 36: 36, 37: 37, 38: 38, 39: 39, 40: 40, 41: 41, 42: 42, 43: 43, 44: 44, 45: 45, 46: 46, 47: 47, 48: 48, 49: 49, 50: 50, 51: 51, 52: 52, 53: 53, 54: 54, 55: 55, 56: 56, 57: 57, 58: 58, 59: 59, 60: 60, 61: 61, 62: 62, 63: 63, 64: 64, 65: 65, 66: 66, 67: 67, 68: 68, 69: 69, 70: 70, 71: 71, 72: 72, 73: 73, 74: 74, 75: 75, 76: 76, 77: 77, 78: 78, 79: 79, 80: 80, 81: 81, 82: 82, 83: 83, 84: 84, 85: 85, 86: 86, 87: 87, 88: 88, 89: 89, 90: 90, 91: 91, 92: 92, 93: 93, 94: 94, 95: 95, 96: 96, 97: 97, 98: 98, 99: 99, 100: 100}
4704
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
1008
对于更大数量的元素,我们可以清楚地看到内存消耗没有可比性。 dict 几乎是 100 个元素的元组列表的 4.7 倍。如果我们有十万个元素要存储,只需考虑一个 dict 占用的内存。
我们已经确定了添加元素后两个对象的大小变化,如下所述。Empty datatypes memory consumption 64 list of tuples increases by 64 after every 8 elements 240 dict increases to 368 from 6th element;1184 from 22nd element; 2280 from 43rd element; 4704 from 86th; 9320 from 171st