zhangfeiwen 发表于 2020-9-8 20:13:20

39讲课后题用类模拟栈

class Stack:
    def __init__(self,start=[]):
      #能否直接用self.stack=start ?
      self.stack=[]
      for x in start:
            self.push(x)

    def isEmpty(self):
      return not self.stack

    def push(self,x):
      self.stack.append(x)

    def pop(self):
      self.stack.pop()

    def top(self):
      print(self.stack[-1])

    def bottom(self):
      print(self.stack)



想问下各位如果用self.stack=start 会有什么后患吗

sunrise085 发表于 2020-9-8 20:31:24

不可以用self.stack=start 。因为这样写的话,stack和start 是同一个列表,若start被修改了那么栈也被修改了
举个例子
class Stack:
    def __init__(self,start=[]):
      self.stack=start

    def isEmpty(self):
      return not self.stack

    def push(self,x):
      self.stack.append(x)

    def pop(self):
      self.stack.pop()

    def top(self):
      print(self.stack[-1])

    def bottom(self):
      print(self.stack)


list1=
a=Stack(list1)
a.top()#这里得到的是4
list1.pop()
a.top()#这里得到的是3
但是可以用self.stack=start[:]


zhangfeiwen 发表于 2020-9-8 21:44:21

sunrise085 发表于 2020-9-8 20:31
不可以用self.stack=start 。因为这样写的话,stack和start 是同一个列表,若start被修改了那么栈也被修 ...

感谢 我片面了
页: [1]
查看完整版本: 39讲课后题用类模拟栈