为什么 class 中名为 nodes 的列表变量采用 class 的前一个实例的输出?
Why the list variable named nodes in the class is taking the output of the previous instance of the class?
class Node:
def __init__(self, value):
self.data = value
self.next = None
class SinglyLinkedList:
nodes = []
def __init__(self):
self.head = None
self.tail = None
def insertHead(self, value):
node = Node(value)
if(self.head is None):
self.head = node
self.tail = node
return
node.next = self.head
self.head = node
def insertTail(self, value):
node = Node(value)
if(self.tail is None):
self.head = node
self.tail = node
return
self.tail.next = node
self.tail = node
def displayNodes(self):
temp = self.head
while (temp is not None):
self.nodes.append(temp.data)
temp = temp.next
return self.nodes
### Object 1
obj1 = SinglyLinkedList()
obj1.insertHead(8)
obj1.insertHead(7)
obj1.insertHead(5)
obj1.insertTail(30)
print(obj1.displayNodes())
### Object 2
obj2 = SinglyLinkedList()
obj2.insertHead(20)
obj2.insertHead(10)
print(obj2.displayNodes())
### Object 3
obj3 = SinglyLinkedList()
obj3.insertHead(50)
obj3.insertHead(22)
obj3.insertHead(19)
print(obj3.displayNodes())
print(obj3.nodes)
### Object 4
obj4 = SinglyLinkedList()
obj4.insertHead(45)
obj4.insertHead(40)
obj4.insertHead(35)
obj4.insertHead(28)
print(obj4.displayNodes())
输出
python flatten_LL.py
[5, 7, 8, 30]
[5, 7, 8, 30, 10, 20]
[5, 7, 8, 30, 10, 20, 19, 22, 50]
[5, 7, 8, 30, 10, 20, 19, 22, 50]
[5, 7, 8, 30, 10, 20, 19, 22, 50, 28, 35, 40, 45]
This the code of a singly linked list. I have created four instances and i am storing the linked list value in the list variable named "nodes". For each instance i am returning that list variable "nodes".
As you can see the output, from the second instance, display of the nodes the output of the previous instance is still staying as it is. I want to know why this is happenning, as for each instance the storage is allocated to that instance separately.
因为 nodes
是(本质上)a static variable。
你可能打算写这个:
class SinglyLinkedList:
def __init__(self):
self.nodes = []
self.head = None
self.tail = None
class Node:
def __init__(self, value):
self.data = value
self.next = None
class SinglyLinkedList:
nodes = []
def __init__(self):
self.head = None
self.tail = None
def insertHead(self, value):
node = Node(value)
if(self.head is None):
self.head = node
self.tail = node
return
node.next = self.head
self.head = node
def insertTail(self, value):
node = Node(value)
if(self.tail is None):
self.head = node
self.tail = node
return
self.tail.next = node
self.tail = node
def displayNodes(self):
temp = self.head
while (temp is not None):
self.nodes.append(temp.data)
temp = temp.next
return self.nodes
### Object 1
obj1 = SinglyLinkedList()
obj1.insertHead(8)
obj1.insertHead(7)
obj1.insertHead(5)
obj1.insertTail(30)
print(obj1.displayNodes())
### Object 2
obj2 = SinglyLinkedList()
obj2.insertHead(20)
obj2.insertHead(10)
print(obj2.displayNodes())
### Object 3
obj3 = SinglyLinkedList()
obj3.insertHead(50)
obj3.insertHead(22)
obj3.insertHead(19)
print(obj3.displayNodes())
print(obj3.nodes)
### Object 4
obj4 = SinglyLinkedList()
obj4.insertHead(45)
obj4.insertHead(40)
obj4.insertHead(35)
obj4.insertHead(28)
print(obj4.displayNodes())
输出
python flatten_LL.py
[5, 7, 8, 30]
[5, 7, 8, 30, 10, 20]
[5, 7, 8, 30, 10, 20, 19, 22, 50]
[5, 7, 8, 30, 10, 20, 19, 22, 50]
[5, 7, 8, 30, 10, 20, 19, 22, 50, 28, 35, 40, 45]
This the code of a singly linked list. I have created four instances and i am storing the linked list value in the list variable named "nodes". For each instance i am returning that list variable "nodes". As you can see the output, from the second instance, display of the nodes the output of the previous instance is still staying as it is. I want to know why this is happenning, as for each instance the storage is allocated to that instance separately.
因为 nodes
是(本质上)a static variable。
你可能打算写这个:
class SinglyLinkedList:
def __init__(self):
self.nodes = []
self.head = None
self.tail = None