迭代一个实例;为什么控制台显示两个不同的对象?

时间:2017-03-21 03:36:26

标签: python class instance

我有一个问题是,迭代对象的实例化是否会创建多个对象(我假设没有)。我做了这个测试来检查:

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)?

2 个答案:

答案 0 :(得分:3)

您正在创建多个对象。但是,您也在丢弃它们。因此,新对象每次只是(重新)分配相同的内存。

答案 1 :(得分:0)

每次调用Foo(i)时,它都会创建一个新对象。所以在for循环中,第一个循环,它在0x010BA470处找到了空闲空间并在那里创建了对象,然后将对象地址分配给变量a。在下一个周期,0x010BA470处的空间仍由a保持,因此它在新位置0x010BA4F0处找到空闲空间并在那里创建对象并将其地址分配给a。变量a现在在新位置保存了一个新对象,因此释放了0x010BA470处的空间。然后在第三个周期,0x010BA470的空间被分配给新对象,依此类推。因此,这两个位置交替用于循环中创建的新对象。