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?