¿"Igual" en Python usa == o es?

Prefacio

El texto y las imágenes de este artículo son de Internet y son únicamente con fines de aprendizaje y comunicación. No tienen ningún uso comercial. Si tiene alguna pregunta, comuníquese con nosotros para su procesamiento.

PD: Si necesita materiales de aprendizaje de Python, puede hacer clic en el enlace de abajo para obtenerlo usted mismo.

Materiales de aprendizaje gratuitos de Python y respuestas de comunicación grupal Haga clic para unirse


 

Recientemente, un lector me hizo una pregunta en una entrevista, con la esperanza de que pudiera escribir el contenido relevante en detalle, no, ¡acomódelo ahora!

La diferencia entre is y ==

Parece muy simple, pero también hay muchos detalles. El artículo de hoy es para llevarlo a una comprensión profunda de los conocimientos relacionados.

Dar algunos ejemplos

Si lo explica al principio, muchos amigos no lo entenderán, por lo que primero ejecutamos algunos programas.

>>> x = y = [4,3,1]
>>> z = [4,3,1]
>>> print(x is y)
True
>>> print(x == y)
True
>>> print(x == z)
True
>>> print(x is z)
False

Primero, echemos un vistazo a este ejemplo. Encontraremos que x devuelve Verdadero independientemente de si se usa es o ==, pero el contenido de xyz es el mismo. Use == para devolver Verdadero, pero usar es devolver Falso.

En Python, == compara valores y compara objetos.

Entre ellos, el objeto Python contiene principalmente id, valor y tipo de datos, en la comparación de is, se compara el id.

Entonces aquí imprimimos los valores de id de x, y y z

>>> print(id(x))
140513337973408
>>> print(id(y))
140513337973408
>>> print(id(z))
140513337973248

Al comparar los valores de id de xey son iguales, pero el valor de id de z es diferente.

¿Por qué xey son iguales?

En Python, = no es solo una asignación, también asigna la dirección de referencia, por lo que en la memoria, xey llaman al mismo objeto.

Puede consultar la imagen de abajo

 

 

Sigamos mirando

>>> a = '123'
>>> b = '123'
>>> print(a is b)
True
>>> print(a == b)
True
##############
>>> c = 100
>>> d = 100
>>> print(c == d)
True
>>> print(c is d)
True
##############
>>> a = 1000
>>> b = 1000
>>> print(a is b)
False
>>> print(a==b)
True

Algunos amigos pueden confundirse al ver esto. ¿Qué es esto ...?

Primero que nada, déjame hablar sobre por qué las cadenas son iguales. De hecho, hay un mecanismo interno en Python. En este mecanismo, solo se guardará un objeto de cadena con el mismo valor. Esto es para mejorar la eficiencia de ejecución de Python.

Entonces, ¿cómo se logra? En realidad, es muy simple. Este mecanismo interno funciona manteniendo un grupo de almacenamiento de cadenas (un diccionario). La clave de este diccionario es el valor de la cadena y el valor es la dirección de referencia de la cadena.

Cada vez que cree una nueva cadena, irá al grupo de cadenas para averiguar si existe el mismo valor de cadena y, si existe, llamará directamente a la dirección de referencia de la cadena.

Cree que ve esto, ya entiende por qué las cadenas son siempre iguales.

 

 

A continuación, continuaremos hablando de la comparación de los siguientes dos tipos de enteros, lo que nos confunde aún más.

>>> c = 100
>>> d = 100
>>> print(c == d)
True
>>> print(c is d)
True
##############
>>> a = 1000
>>> b = 1000
>>> print(a is b)
False
>>> print(a==b)
True

De hecho, no es difícil de entender. Existe el concepto de un grupo de objetos enteros pequeños en Python. El grupo de objetos enteros pequeños son simplemente los objetos creados en el intervalo [-5,256] y no serán reciclados.

En otras palabras, cuando crea un número entero en el rango de [-5,256], primero verificará si existe el mismo valor, y si lo hay, citará directamente la dirección.

Si lo que crea no está en este rango, volverá a crear un nuevo objeto, por lo que su dirección debe ser diferente.

Resumen: En Python, solo las cadenas y los grupos de objetos enteros pequeños llamarán a las direcciones existentes, y otros objetos como list, tuple y dict recrearán un nuevo objeto.

para resumir

En Python, todavía hay alguna diferencia entre is y ==, no podemos usarlo arbitrariamente.

Pero ahora escribimos código básicamente en el IDE, como pycharm, en pycharm optimiza el intérprete, sin importar si su valor está en el rango [-5,256], siempre que el valor sea igual, los dos estarán completamente igual. Entonces aquí necesita una atención especial.

Supongo que te gusta

Origin blog.csdn.net/pythonxuexi123/article/details/112911497
Recomendado
Clasificación