class Stack:
    '''A stack of items.'''

    def __init__(self, other_stack = None):
        '''Make a new Stack, and optionally initialize it with a 
        copy of another stack. 
        
        '''
        if other_stack is None: self._stack = []
        else: self._stack = other_stack._stack[:]
            
    def push(self, o):
        '''Make o the new top item in this Stack.'''
        self._stack.append(o)
        
    def pop(self):
        '''Remove and return the top item.'''
        return self._stack.pop()
    
    def peek(self):
        '''Return the top item.'''
        return self._stack[-1]
    
    def isEmpty(self):
        '''Return whether there are any items in this Stack.'''
        return self._stack == []
        
    def size(self):
        '''Return the number of items in this Stack.'''
        return len(self._stack)
