在python中使用链表实现堆栈。pop方法的问题和关于可变性的问题

在python中使用链表实现堆栈。pop方法的问题和关于可变性的问题,python,linked-list,stack,Python,Linked List,Stack,我正在尝试使用一个基于节点类的链表来实现一个堆栈。我对我的类的pop方法有一些问题,它似乎没有表现出易变性。当我使用pop类方法时,它会正确返回堆栈顶部,但无法更新堆栈 x=stack_linked(1) x=x.insert(2) x=x.insert(3) x.print() # This is correct and prints 3,2,1 print(x.pop()) # This is correct and prints 3, but doesn't actually modify

我正在尝试使用一个基于节点类的链表来实现一个堆栈。我对我的类的pop方法有一些问题,它似乎没有表现出易变性。当我使用pop类方法时,它会正确返回堆栈顶部,但无法更新堆栈

x=stack_linked(1)
x=x.insert(2)
x=x.insert(3)
x.print() # This is correct and prints 3,2,1
print(x.pop()) # This is correct and prints 3, but doesn't actually modify my list
x.print() # This prints 3,2,1
为什么自我是不可变的?另外,我如何修改我的类而不完全破坏它或为它创建包装器?这是我的班级

class stack_linked(object):
    def __init__(self,data):
     self.data=data
     self.next=None

    def insert(self,front):
     front=stack_linked(front)
     front.next=self
     return front

    def peek(self):
     if self==None:
        return None
     else   
        return self.data

    def pop(self):
     front=self
     self=self.next # some sort of issue here
     return front


    def print(self):
     x=self
     if x==None:
        print("Empty")
     else:
        print(x.data)
     while x.next !=None:
        x=x.next
        print(x.data) 

仅具有节点和转发链接有点限制,但可以通过使第一个节点包含第二个节点来实现pop(-first):

class stack_linked(object):
    def __init__(self, data):
        self.data = data
        self.next = None

    def pop(self):
        data = self.data
        nxt = self.next
        if nxt is None:
            self.data = self.next = None
        else:
            self.data = nxt.data
            self.next = nxt.next
            nxt.next = None
        return data

在实例方法中分配给
self
不会导致整个实例被替换。那么,我该如何重做pop方法?这也是一个易变性问题吗?或者它是不相关的?
pop
应该返回数据,而不是节点..不相关,例如,请参见为什么设置
nxt.next=None
nxt.next=None
可以中断任何循环,以便垃圾收集器可以更轻松地工作。语义上也是正确的,因为
nxt
对象不再存在,因此不应该指向活动对象。