在 python 中实现不可变堆栈

implementing immutable stack in python

对使用 python 中的现有对象创建新对象有疑问。示例:我想使用 python 实现不可变堆栈。但是,这里要注意的是,每当我创建新对象时,它都应该从现有对象创建: 在下面的示例中,我如何更新推送功能以从 s0 创建 s1 的副本并将值 2 附加到 S1

class Stack:
    def __init__(self):
        self.items = []
    def push(self, item):
        self.items.append(item)
    def pop(self):
        return self.items.pop()
    def peek(self):
        return self.items[-1]
    def __str__(self):
        return str(self.items)

if __name__ == "__main__":
    s0 = Stack()
    s1 = s0.push(2)
    s2 = s1.push(3)

您只需要一种方法来使用现有 items.

的副本创建新的 Stack 对象
    def __init__(self, contents=[]):
        self.items = contents
    def push(self, item):
        new_stack = Stack(self.items[:]]
        new_stack.items.append(item)
        return new_stack