【问题标题】:Why the list variable named nodes in the class is taking the output of the previous instance of the class?为什么类中名为节点的列表变量会获取类的前一个实例的输出?
【发布时间】:2020-11-30 04:45:51
【问题描述】:
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]

这是一个单链表的代码。我创建了四个实例,并将链表值存储在名为“nodes”的列表变量中。对于每个实例,我都返回该列表变量“节点”。 正如您所看到的输出,从第二个实例开始,节点的显示前一个实例的输出仍然保持原样。我想知道为什么会发生这种情况,因为每个实例的存储都是单独分配给该实例的。

【问题讨论】:

    标签: python python-3.x list class class-instance-variables


    【解决方案1】:

    因为nodes(本质上)是a static variable

    你可能打算这样写:

    class SinglyLinkedList:    
        def __init__(self):
            self.nodes = []
            self.head = None
            self.tail = None
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 2023-03-28
      • 2015-06-09
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      相关资源
      最近更新 更多