#!/usr/bin/env python3

from collections import deque as _deque
from collections.abc import Iterable
from itertools import islice, zip_longest as izip

def as_list(val, wrap=True):
    #strings are iterables all the way down, so an exception needs to be made
    # else we get infinite recursion, which is bad
    # this only took me 2 hours to debug, new record!
    if not isinstance(val, Iterable) or isinstance(val, str):
        return [val] if wrap else val
    else:
        return [as_list(x, wrap=False) for x in val]
        
class deque(_deque):
    def copy(self):
        if hasattr(_deque, 'copy'):
            return _deque.copy(self)
        else:
            return deque(x for x in self)
    
    def __getitem__(self, key):
        if isinstance(key, slice):
            return [x for x in self][key]
        else:
            return _deque.__getitem__(self, key)
            
    def reversed(self):
        tmp = self.copy()
        tmp.reverse()
        return tmp
        
    def __add__(self, other):
        if hasattr(_deque, 'add'):
            return _deque.__add__(self, other)
        else:
            tmp = self.copy()
            tmp.extend(other)
            return tmp
            
    __radd__ = __add__

def zip_longest(*iterables):
    for vals in izip(*iterables):
        yield filter(lambda x:x is not None, vals)
@@ -1015,272 +1015,8 @@
 tmp%0D
-%0A        %0D%0A    def __add__(self, other):%0D%0A        if hasattr(_deque, 'add'):%0D%0A            return _deque.__add__(self, other)%0D%0A        else:%0D%0A            tmp = self.copy()%0D%0A            tmp.extend(other)%0D%0A            return tmp%0D%0A            %0D%0A    __radd__ = __add__%0D
 %0A%0D%0Ad

remove more unnecessary code