我有一个问题是,迭代对象的实例化是否会创建多个对象(我假设没有)。我做了这个测试来检查:
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 :(得分:3)
您正在创建多个对象。但是,您也在丢弃它们。因此,新对象每次只是(重新)分配相同的内存。
答案 1 :(得分:0)
每次调用Foo(i)时,它都会创建一个新对象。所以在for循环中,第一个循环,它在0x010BA470处找到了空闲空间并在那里创建了对象,然后将对象地址分配给变量a。在下一个周期,0x010BA470处的空间仍由a保持,因此它在新位置0x010BA4F0处找到空闲空间并在那里创建对象并将其地址分配给a。变量a现在在新位置保存了一个新对象,因此释放了0x010BA470处的空间。然后在第三个周期,0x010BA470的空间被分配给新对象,依此类推。因此,这两个位置交替用于循环中创建的新对象。