Concatenación de dos listas: diferencia entre '+=' y extend()
He visto que en realidad hay dos (tal vez más) formas de concatenar listas en Python:
Una forma es utilizar el extend()
método:
a = [1, 2]
b = [2, 3]
b.extend(a)
el otro para usar el operador más (+):
b += a
Ahora me pregunto: ¿cuál de esas dos opciones es la forma 'pitónica' de realizar la concatenación de listas y hay alguna diferencia entre las dos? (Busqué el tutorial oficial de Python pero no pude encontrar nada sobre este tema).
La única diferencia a nivel de código de bytes es que la .extend
forma implica una llamada a una función, que es un poco más cara en Python que INPLACE_ADD
.
Realmente no es nada de lo que deba preocuparse, a menos que realice esta operación miles de millones de veces. Sin embargo, es probable que el cuello de botella esté en otro lugar.
No puede usar += para variables no locales (variable que no es local para la función y tampoco es global)
def main():
l = [1, 2, 3]
def foo():
l.extend([4])
def boo():
l += [5]
foo()
print l
boo() # this will fail
main()
Es porque, para casos extendidos , el compilador cargará la variable l
usando LOAD_DEREF
la instrucción, pero para += usará LOAD_FAST
- y obtendrá*UnboundLocalError: local variable 'l' referenced before assignment*
Puede encadenar llamadas a funciones, pero no puede += una llamada a función directamente:
class A:
def __init__(self):
self.listFoo = [1, 2]
self.listBar = [3, 4]
def get_list(self, which):
if which == "Foo":
return self.listFoo
return self.listBar
a = A()
other_list = [5, 6]
a.get_list("Foo").extend(other_list)
a.get_list("Foo") += other_list #SyntaxError: can't assign to function call