我有一個鏈接列表,我想實現爲一個隊列。我已經發現它的工作原理,但是我對這個特定部分的工作原理有疑問。下面是代碼:Python與單尾鏈接列表
class LinkedQueue:
class _Node:
def __init__(self, element, next):
self._element = element
self._next = next
def __init__(self):
self._head = None
self._tail = None
self._size = 0
def enqueue(self, e):
newest = self._Node(e, None)
if self.is_empty():
self._head = newest
else:
self._tail._next = newest
self._tail = newest
self._size += 1
如果隊列是空的,我入隊,第一個條件在排隊的真實,被觸發,最新被分配到self._head。但是,當我添加另一個元素時,else塊被觸發,並且self._tail._next被分配最新。這顯然會改變_head的_next變量。但是,分配第三個元素時,_head的_next變量不會更改。這是爲什麼?另外,不應該_tail被最新改變,並且因此_next變量被新分配的None覆蓋。
該代碼完全工作,我理解鏈表的邏輯,但我不明白爲什麼這個特定的代碼工作。
啊,我明白了。我一直在使用C++,而我只注意到Python有不同的賦值規則(所有對象都是通過引用傳遞的)。我想這對於某些事情來說非常方便,但是對於其他人來說卻很混亂。無論如何,非常感謝您的全力幫助! 對於其他人擺動,這裏是一個鏈接,以幫助避免我的錯誤作爲上述偉大反應的補充:http://robertheaton.com/2014/02/09/pythons-pass-by-object-reference-as -explained逐菲利普-K-迪克/ – cnxwelcomes 2015-02-09 01:37:28