imprimir powerset de una cadena

Estoy tratando de escribir el código de Python para imprimir elset de poder de una cadena, pero estoy corriendo en algunos errores. Esto es lo que tengo:

def getperm (string):
    perm = []
    if len(string) == 0:
        perm.append("")
        return perm
    #if len(string) == 1:
    #   perm.append(string)
    #   perm.append("")
    first = string[0]
    print "first = " + str(first)
    rem = string[1:len(string)]
    print "rem = " + str(rem)
    words = getperm(rem)
    for word in words:
        for i in range(len(word)):
            temp = string[0:i] + first + string[i:len(string)]
            print "temp = " + str(temp)
            perm.append(temp)

    return perm

if __name__=="__main__":
    a = "ab"
    mag  = getperm(a)
    print mag

Mi salida esperada sería:

['', 'a', 'b', 'ab']

Mi salida real es:

[]

¿Alguien puede ayudarme a averiguar qué está pasando? ¿Es esto algún matiz de python, o hay un error en mi código? Creo que mi código debería estar bien. Me voy de la quinta edición de Cracking the coding.

¡Gracias!

Respuestas a la pregunta(6)

Su respuesta a la pregunta