python linklist指针和大小

时间:2016-09-11 23:09:33

标签: python c++ class pointers linked-list

我是一名新手python程序员。我在下面看到了leetcode对链表的定义。我对这个概念有两个问题,任何帮助都将不胜感激。提前致谢

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

Q1只是想知道“self.next”的类型是什么,我知道在C ++中,它应该是一个表示下一个节点地址的指针。但是python没有那种类型,所以我很困惑“next”是什么类型。

Q2有些人告诉我接下来只是一个名字。如果是这种情况,我运行下面的代码,

head =ListNode(1)
print sys.getsizeof(head)
head.next = ListNode(2)
print sys.getsizeof(head)

首先head.next为'None',然后将其分配给另一个ListNode类型, 但是我在这个改变之前和之后得到了相同大小的头部,我认为头部的大小应该更大,因为它的一个成员(下一个)从None类型改为ListNode类型。我对此感到困惑,非常感谢你!

PS。根据我的理解,如果我不断向链接列表中添加新节点,那么头部会越来越大,因为越来越多的“嵌套”成员“接下来”,只需指出我出错的地方,谢谢。

2 个答案:

答案 0 :(得分:0)

问题1:

Python变量是动态类型的。 (即一个变量可以包含一个int,然后保存一个列表,然后保存任何其他任意对象等)。

在您的情况下,AJAX首先引用1000 Head.next个对象。

为其分配不同的值(None)后,NoneType现在引用新创建的ListNode(2)对象。

问题2:

为什么尺寸不会改变。 我不是python的Head.next如何工作的专家,但从我可以收集到的,两种情况下的List.next是一个引用变量(即引用其他对象的变量)。大小不会改变,因为ListNode找到对象变量的大小。其中sys.getsizeof只是对两种情况下其他对象的引用。

有关sys.getsizeof如何运作的更完整答案,请参阅How do I determine the size of an object in Python?

答案 1 :(得分:0)

我对链表的解释。

Head.next