我有一个链接列表,我想实现为一个队列。我已经发现它的工作原理,但是我对这个特定部分的工作原理有疑问。下面是代码: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