1
luoleng 2020-11-23 15:20:31 +08:00
示例 1 中,先是创建一个 Class1 实例( m ),然后把它赋予变量 c,新一轮 for 循环的时候,又重新创建一个 Class1 实例( n ),然后又把它赋予变量 c,这个时候因为实例 m 没有被引用了,所以会被销毁。之后的循坏又是在 m 的原地址上创建 m1,然后销毁 n……
示例 2 中,函数执行完后在函数体内创建的变量就被销毁了;之后的实例也是在原来实例的地址上创建的; 至于新实例为什么会在已被销毁的旧实例地址上创建,我姑且认为是 python 自己内存优化的一种结果吧。 |
2
gwy15 2020-11-23 15:28:22 +08:00
楼上说得对,要到第二次 c = Class1() 的时候才会失去上一个迭代的引用,然后才会进行 GC 。
如果改成 for i in range(5): ....c = Class1() ....print(f'0x{id(c):x}') ....del c 就会变成一样的地址了 |