2017-03-21 17 views
1

我有一個問題,是否迭代對象的實例會創建多個對象(我假設沒有)。我做了這個測試來檢查:迭代一個實例;爲什麼控制檯顯示兩個不同的對象?

class Foo: 
    def __init__(self, msg): 
     self.msg = msg 
     print(self.msg, self) 

    for i in range(7): 
     a = Foo(i) 

但是,控制檯顯示了這個:

0 <__main__.Foo object at 0x010BA470> 
1 <__main__.Foo object at 0x010BA4F0> 
2 <__main__.Foo object at 0x010BA470> 
3 <__main__.Foo object at 0x010BA4F0> 
4 <__main__.Foo object at 0x010BA470> 
5 <__main__.Foo object at 0x010BA4F0> 
6 <__main__.Foo object at 0x010BA470> 

假設我只實例化一個對象,爲什麼控制檯多次報告在內存中兩個不同對象(0x010BA470和0x010BA4F0)?

+0

嘗試'[Foo(i)for i in range(7)]'看看當你保留對你創建的所有實例的引用時會發生什麼。 – jonrsharpe

回答

0

每當您調用Foo(i)時,它都會創建一個新對象。因此,在for循環中,第一個循環,它在0x010BA470處找到空閒空間並在那裏創建對象,然後將對象地址分配給變量a。在下一個週期,0x010BA470處的空間仍然由a保存,因此它在新位置0x010BA4F0處找到空閒空間,並在那裏創建對象並將其地址分配給a。變量a現在在一個新的位置上保存了一個新對象,所以釋放了0x010BA470的空間。然後在第三個循環中,將0x010BA470處的空間分配給新對象,依此類推。所以這兩個位置交替循環中創建的新對象。

3

您正在創建多個對象。但是,你也拋棄了它們。所以新對象每次只是(重新)分配相同的內存。

相關問題