我正在使用python3。我遇到了一种奇怪的情况,只有在对象有办法确定是否有任何对象引用时才能解释这种情况。但是,这种行为似乎并没有影响python2.7。我已经放弃了对垃圾收集问题的解释,因为gc.disable()
没有区别。只是为了澄清,这对我来说不是问题,但我真的很想知道这是怎么回事。对象可以跟踪其引用吗?
如果您对特定情况感兴趣,请参阅MWE。
我这个代码从matplotlib docs(matplotlib 2.0.0)剪断工作:
import matplotlib.pyplot as plt
import numpy as np
from datetime import datetime
def update_title(axes):
axes.set_title(datetime.now())
axes.figure.canvas.draw()
fig, ax = plt.subplots()
x = np.linspace(-3, 3)
ax.plot(x, x*x)
timer = fig.canvas.new_timer(interval=100)
timer.add_callback(update_title, ax)
timer.start()
#timer_another_ref = timer
#timer = None
plt.show()
现在,如果我取消对该行timer = None
,计时器没有了(只在python3工作,正如我之前所说)。另一方面,如果我现在取消注释其他行,它会按预期工作。
作为旁注,我有两台电脑。一个是在ubuntu 14.04上运行python 3.4.3并使用后端Qt5Agg,另一个是在ubuntu 16.04上运行python 3.5.2并使用后端TkAgg。这种行为只在前者(我猜想它与后端相关)上出现。
不知道那个谢谢! –
因此,在这种情况下,计时器可能正在检查sys.getrefcount(self)。有趣。 – LGenzelis