这分为两个问题。我也确实想排除这些问题是出于好奇。
问题1
检索基于节点的集合的内存的方法是什么?即节点链占用多少内存?如果要查找列表占用的内存量,请使用:
import sys
sys.getsizeof([])
当我在集合类上使用相同的命令(见下文)sys.getsizeof(DoublyLinkedBag())
时,它会给我一个值56。但是,当我添加一个节点并运行相同的命令时,我会得到相同的数字。我假设这是因为我正在获取类实例的分配,而不是节点链的分配。
我也尝试过做sys.getsizeof(node.add(3))
。按照上述假设,我是否可以将它给我的值乘以节点链大小乘以sys.getsizeof(DoublyLinkedBag())
所得到的值?
关联的双向链接类:
class DoublyLinkedBag:
class Node:
def __init__(self, element = None):
self.next = None
self.prev = None
self.element = element
def __init__(self):
self.front = None
self.rear = None
self.size = 0
def add(self, element):
n = self._make_new_node(element)
if self.size == 0:
self.front = self.rear = n
self.size += 1
else:
n.prev = self.rear
self.rear.next = self.rear = n
self.size += 1
# contains, removes methods here...
# add nodes
node = DoublyLinkedBag()
node.add(4)
node.add(6)
问题2
节点存储在堆或堆栈内存中,为什么?我本人试图对此进行推理,但是我发现自己在两个答案之间跳来跳去。
答案 0 :(得分:0)
要计算内存分配,我建议尝试使用pympler lib中的asizeof。
from pympler import asizeof
...
bag = DoublyLinkedBag()
for i in range(100):
print(asizeof.asizeof(bag))
bag.add(i)