Python, ¿es esto un error? Agregar a una lista dentro de una tupla da como resultado Ninguno?[duplicar]
-
09-12-2019 - |
Pregunta
Este es uno de los ejemplos más cortos que he escrito en mucho tiempo.
Creo y actualizo una tupla3
In [65]: arf=(0,1,[1,2,3])
In [66]: arf=(arf[0],arf[1], arf[2] )
In [67]: arf
Out[67]: (0, 1, [1, 2, 3])
Entonces la reasignación funcionó.
Ahora intento cambiar su contenido.
In [69]: arf=(arf[0],arf[1], [2] )
In [70]: arf
Out[70]: (0, 1, [2])
In [71]: arf=(arf[0],arf[1], arf[2].append(3) )
In [72]: arf
Out[72]: (0, 1, None)
Vuelvo Ninguno???Oye, ¿qué pasa?Lo siento, soy un novato en Python.
Solución
list.append()
siempre regresa None
entonces arf[2].append(3)
agregará 3
a arf
y volver None
nunca llegas a ver este cambio a arf[2]
porque inmediatamente te estás volviendo a unir arf
a la tupla recién creada
Quizás esto es lo que quieres
arf = (arf[0], arf[1], arf[2]+[3])
Otros consejos
El list.append
El método cambia la lista en su lugar y regresa. None
.Esto no es un error, así es como append
El método funciona.
append
no hace que [T devuelva la nueva lista, modifica el antiguo en el lugar:
>>> a = [1, 2, 3]
>>> b = a.append(4)
>>> print b
None
>>> print a
[1, 2, 3, 4]
Para profundizar en la respuesta de gnibbler, list.append() cambia la lista en sí, pero no devuelve el nuevo valor de la lista.Vuelve None
.Entonces su comando 71 cambia el valor de arf[2] en la forma que deseaba, pero luego regresa inmediatamente None
y establece arf[2] para eso.
La autorreferencia en tu ejemplo confunde un poco las cosas, pero si intentas un comando como someothervariable=arf[2].append(3)
, verás cómo funciona. someothervariable
se establece en None
y arf[2] tiene 3 añadido sin una declaración de asignación explícita.