what - variables python 3
Precedencia del operador de asignaciĆ³n de Python-(a, b)=a[b]={}, 5 (1)
De la documentación de las declaraciones de asignación :
Una declaración de asignación evalúa la lista de expresiones (recuerde que esto puede ser una expresión única o una lista separada por comas; esta última produce una tupla) y asigna el único objeto resultante a cada una de las listas de destino, de izquierda a derecha.
Tienes dos listas de objetivos de asignación; a, b
y a[b]
, el valor {}, 5
se asigna a esos dos objetivos de izquierda a derecha.
Primero {}, 5
se desempaqueta la tupla {}, 5
a a, b
. Ahora tienes a = {}
y b = 5
. Tenga en cuenta que {}
es mutable.
A continuación, asigna el mismo diccionario y entero a a[b]
, donde a
evalúa al diccionario, b
evalúa a 5
, por lo que está configurando la clave 5
en el diccionario a la tupla ({}, 5)
creando una referencia circular . El {...}
tanto, se refiere al mismo objeto al que ya se está haciendo referencia.
Debido a que la asignación se lleva a cabo de izquierda a derecha, puede dividirla en:
a, b = {}, 5
a[b] = a, b
entonces a[b][0]
es el mismo objeto que a
:
>>> a, b = {}, 5
>>> a[b] = a, b
>>> a
{5: ({...}, 5)}
>>> a[b][0] is a
True
Vi este fragmento de Python en Twitter y quedé bastante confundido por la salida:
>>> a, b = a[b] = {}, 5
>>> a
{5: ({...}, 5)}
¿Que esta pasando aqui?