Ignorar el caso en cadenas de Python [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Cómo hago una comparación de cadenas que no distingue entre mayúsculas y minúsculas? 11 respuestas

Cuál es la forma más fácil de comparar cadenas en Python, ignorando mayúsculas y minúsculas?

Por supuesto, se puede hacer (str1.lower () <= str2.lower ()), etc., pero esto creó dos cadenas temporales adicionales (con los obvios gastos generales de alloc / g-c).

Supongo que estoy buscando un equivalente al stricmp de C ().

[Se requiere más contexto, así que lo demostraré con un ejemplo trivial:]

Suponga que desea ordenar una larga lista de cadenas. Simplemente haz theList.sort (). Se trata de comparaciones de cadenas O (n * log (n)) y sin administración de memoria (ya que todas las cadenas y elementos de lista son algún tipo de punteros inteligentes). Usted es feliz

Ahora, desea hacer lo mismo, pero ignore el caso (simplifiquemos y digamos que todas las cadenas son ascii, por lo que se pueden ignorar los problemas locales). Puede hacer theList.sort (key = lambda s: s.lower ()), pero luego causa dos nuevas asignaciones por comparación, además de cargar al recolector de basura con las cadenas duplicadas (bajadas). Cada ruido de gestión de memoria es de orden de magnitud más lento que la simple comparación de cadena

Ahora, con una función similar a stricmp () en el lugar, usted hace: theList.sort (cmp = stricmp) y es tan rápido y amigable con la memoria como theList.sort (). Eres feliz de nuevo.

El problema es que cualquier comparación de mayúsculas y minúsculas basada en Python implica duplicaciones de cadenas implícitas, por lo que esperaba encontrar una comparación basada en C (tal vez en una cadena de módulos).

No pude encontrar algo así, de ahí la pregunta aquí. (Espero que esto aclare la pregunta).