Я новичок программиста на питоне. Ниже приведено описание связанного списка в leetcode. У меня есть 2 вопроса для этой концепции, любая помощь будет оценена. Заранее спасибоpython linklist указатель и размер
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
Q1 Просто интересно, что тип «self.next», я знаю, в C++, он должен быть указатель, который представляет собой адрес следующего узла. Но у python нет такого типа, поэтому я смущен, какой тип «следующий».
Q2 Некоторые говорят мне, что это просто имя. Если это так, то я запускаю ниже код,
head =ListNode(1)
print sys.getsizeof(head)
head.next = ListNode(2)
print sys.getsizeof(head)
сначала head.next является «None», а затем ему присваивается другому типу ListNode, , но я получаю тот же размер головы до и после этого изменения, который, я думаю, размер головы должен быть больше, поскольку один из его членов (следующий) изменяется с типа None на тип ListNode. Я просто смущен, спасибо вам большое!
PS. В моем понимании, если я буду добавлять новые узлы в список ссылок, голова будет больше и больше, так как все больше и больше «вложенных» членов «следующий», просто укажите, где я ошибаюсь, спасибо.
Его питон вы можете назначить ему что угодно, но это должен быть тип 'Node', который имеет параметр' next' для работы списка. Вам лучше создать метод 'add' для класса списка, вместо того, чтобы явно добавлять в' .next'. Вы можете поместить туда проверку типа или в python 3.5+ есть понятие типов. Размер останется таким же, независимо от того, какой фактический узел является просто значением и ссылкой на следующий узел. Если вам нужно знать, сколько узлов вам нужно, перейдите по списку, чтобы подсчитать узлы или сохранить счет при добавлении узлов. –
спасибо за разъяснение, и еще один вопрос о ссылке, если размер ссылки не изменился, почему у нас был бы другой размер для ссылки на int и ссылку списка, так как в этом случае они являются как ссылкой, так и что объект, на который они ссылаются, отличается. –
Я не уверен на 100%, если честно. Но я знаю, что, хотя все в python является ссылкой. Значение int является неизменной ссылкой и поэтому копируется, когда его назначено (сродни прохождению по значению в C++), но встроенные списки «ListNode», dicts и т. Д. Являются изменяемой ссылкой и поэтому изменяются функцией, которую она передала (сродни неконстантной ссылке в C++). Эта семантическая разница может объяснять разницу в размере. [This] (http://stackoverflow.com/questions/6158907/what-does-python-treat-as-reference-types) вопрос может представлять интерес. –