Estoy realmente atascado en por qué el siguiente bloque de código 1 da como resultado la salida 1 en lugar de la salida 2?Alcance de Python/malentendido estático
bloque de código 1:
class FruitContainer:
def __init__(self,arr=[]):
self.array = arr
def addTo(self,something):
self.array.append(something)
def __str__(self):
ret = "["
for item in self.array:
ret = "%s%s," % (ret,item)
return "%s]" % ret
arrayOfFruit = ['apple', 'banana', 'pear']
arrayOfFruitContainers = []
while len(arrayOfFruit) > 0:
tempFruit = arrayOfFruit.pop(0)
tempB = FruitContainer()
tempB.addTo(tempFruit)
arrayOfFruitContainers.append(tempB)
for container in arrayOfFruitContainers:
print container
**Output 1 (actual):**
[apple,banana,pear,]
[apple,banana,pear,]
[apple,banana,pear,]
**Output 2 (desired):**
[apple,]
[banana,]
[pear,]
El objetivo de este código es para recorrer una matriz y envolver cada una en un objeto padre. Esta es una reducción de mi código real que agrega todas las manzanas a una bolsa de manzanas y demás. Mi suposición es que, por alguna razón, está usando el mismo objeto o actuando como si el contenedor de fruta usa una matriz estática. No tengo idea de cómo arreglar esto.
No es una respuesta a su pregunta, pero también es digno de mención: "while len (arrayOfFruit)> 0:" es equivalente a "while arrayOfFruit:".El último es preferible, según la Guía de estilo de Python al menos. –