次のコードブロック1が出力2の代わりに出力1になるのはなぜですか?Python Scoping/Static Misunderstanding
コードブロック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,]
このコードの目的は、配列を反復し、親オブジェクトの各ラップすることです。これは私の実際のコードを減らしたもので、すべてのリンゴをリンゴの袋などに加えています。私の推測は、何らかの理由で、同じオブジェクトを使用しているか、フルーツコンテナが静的配列を使用しているかのように動作していることです。私はこれをどのように修正するのか分かりません。
質問に対する回答ではなく、注目に値する: "while len(arrayOfFruit)> 0:"は "while arrayOfFruit:"と同じです。Pythonスタイルガイドによれば、後者が望ましい。 –