Python有序链表与引用正确名称的混淆
我在看这个链表,它是一个有序链表。以下代码供参考:Python有序链表与引用正确名称的混淆,python,python-3.x,linked-list,Python,Python 3.x,Linked List,我在看这个链表,它是一个有序链表。以下代码供参考: class Node: def __init__(self,initdata): self.data = initdata self.next = None def getData(self): return self.data def getNext(self): return self.next def setData(self,newda
class Node:
def __init__(self,initdata):
self.data = initdata
self.next = None
def getData(self):
return self.data
def getNext(self):
return self.next
def setData(self,newdata):
self.data = newdata
def setNext(self,newnext):
self.next = newnext
class OrderedList:
def __init__(self):
self.head = None
def add(self,item):
current = self.head
previous = None
stop = False
while current != None and not stop:
if current.getData() > item:
stop = True
else:
previous = current
current = current.getNext()
temp = Node(item)
if previous == None:
temp.setNext(self.head)
self.head = temp
else:
temp.setNext(current)
previous.setNext(temp)
def isEmpty(self):
return self.head == None
def size(self):
current = self.head
count = 0
while current != None:
count = count + 1
current = current.getNext()
return count
mylist = OrderedList()
mylist.add(31)
mylist.add(77)
mylist.add(17)
mylist.add(93)
mylist.add(26)
mylist.add(54)
print(mylist.size())
如您所见,当调用mylist.size时,它将返回6的大小,因为添加了6项内容。但是在add方法中,特别是行:
if previous == None:
temp.setNext(self.head)
self.head = temp
如果我将self.head=temp更改为current=temp,它将返回0的大小。这意味着其余的数字没有被引用。但为什么会是这种情况,我想既然我们之前定义了current=self.head,那么将self.head=temp更改为current=temp会得到相同的结果
current = self.head
current = temp
上面的第一行将使current指向self.head所指的任何内容。
第二行使current表示温度,但它不使self.head表示温度
您可以将current视为对某个底层对象的引用,而self.head恰好也引用了该对象。将电流重新指定给温度不会改变self.head所指的内容
在使用Python时,这可能是一个常见的混淆,关于对象和名称的处理方式有很多信息。见例