一个 monkeypatch 引起的循环引用问题
最近社区里有人提了一个PR^1,解决了一个潜在的内存泄漏问题。我认为这个问题在很多场景都容易忽略,所以分享在这里。 上代码 import gcclass Foo: def bar(self): print("bar")foo = Foo()print("Before", gc.get_count())foo.bar = foo.barprint("setattr", gc.get_count())del fooprint("After", gc.get_count()) 运行发现 foo 对象无法被正常回收,造成了内存泄漏。这是因为看似不起眼的一行 foo.bar = foo.bar,实际上创...