不,实际上在打印时签前面两个已经被析构了。
绑定到第三个是因为循环完成后,这个ai这个变量并没有被删除。或者说,Python并没有在循环中开新的内存空间
你看这个Python示例:
class A:
def __init__(self, i):
print(f"init {type(i)}")
self.i = i
def p(self):
print('>>', self.i)
def __del__(self):
print('del', self)
def main():
a = []
for ai in [A(i) for i in range(3)]:
a.append(lambda : ai.p())
#del ai
del ai
for c in a:
c()
main()
【 在 MyWorkLife 的大作中提到: 】
:
: 你这个例子正好说明问题
: 不像前面例子里面c++ lambda引用一个已经析构的空悬对象
: python对于保持对象生存周期毫无压力
: 只不过三个lambda错误地binding到了最后一个ai对象而已
#发自zSMTH@CDU.MP
--
FROM 117.23.183.*