Está utilizando la comparación de identidad. == es probablemente lo que quieres. La excepción a esto es cuando desea verificar si un elemento y otro son el mismo objeto EXACTO y en la misma posición de memoria. En los ejemplos, los elementos no son los mismos, ya que uno es de un tipo diferente (my_string) que el otro (cadena). Además, no existe tal cosa como una clase. __is__
en python (a menos que, por supuesto, lo pongas allí mismo). Si existiera, al comparar objetos con es no sería confiable simplemente comparar las ubicaciones de la memoria.
La primera vez que me encontré con la palabra clave es, me confundió también. Pensé que es y == no eran diferentes. Produjeron el mismo resultado del intérprete en muchos objetos. Este tipo de suposición es EXACTAMENTE con lo que es ... es para. Es el equivalente de pitón "Oye, no confundas estos dos objetos, son diferentes", que es esencialmente lo que dijo [quien sea que me enderezó]. Encabezado de manera muy diferente, pero un punto == el otro punto.
la de algunos ejemplos útiles y algo de texto para ayudar con las diferencias, a veces confusos visita a document from python.org's mail host escrito por "Danny Yoo"
o, si eso es fuera de línea, utilice el unlisted pastebin que hice de él es cuerpo.
en caso de que, en algunos más o menos 20 lunas azules (lunas azules son un hecho real), son a la vez hacia abajo, voy a citar los ejemplos de código
###
>>> my_name = "danny"
>>> your_name = "ian"
>>> my_name == your_name
0 #or False
###
###
>>> my_name[1:3] == your_name[1:3]
1 #or True
###
###
>>> my_name[1:3] is your_name[1:3]
0
###
que he observado en el pasado que internación cadena puede suceder para que el tiempo de ejecución calculado los valores de entrada y si son lo suficientemente corto. 'a' * 100 no es 'a' * 100; pero 'a' * 20 es "a" * 20. Mientras tanto 'a'.upper() no es' a'.upper(). Jython, IronPython, PyPy y otros pueden internar de manera más agresiva. En resumen, depende de la implementación. Llamar a la función 'intern()' en las cadenas "forzará" a una cadena a tener la misma identidad de objeto que cualquier cadena de caracteres equivalente y previamente interna() 'd, como dices. Sin embargo, no conozco un caso de uso válido para probar la identidad de la cadena. (Posible rendimiento aparte). –