基于Python节点的集合内存分配

2024-06-30 14:51:23 发布

您现在位置:Python中文网/ 问答频道 /正文

这分为两个问题。我还想说,这些问题纯粹是出于好奇

问题1
检索基于节点的集合的内存的方法是什么?即,节点链占用多少内存?如果要查找列表占用的内存量,请使用:

import sys
sys.getsizeof([])

当我在我的collection类上使用相同的命令时(见下文),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
节点是存储在堆内存还是堆栈内存中,为什么?我自己也试着推理,但我发现自己在两个答案之间跳跃


Tags: 内存selfnoneaddnodesize节点init