我正在使用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