我正在研究如何从
中获取False
print(datetime.now() == datetime.now())
我想在每台“现代”/速度足够快的计算机上,这都是 True
。
但是,我注意到了一些奇怪的事情:
print(id(datetime.now()) == id(datetime.now()))
将不断输出 True
,这让我相信 datetime
对象(可能只是那些由 .now()
创建的)是自动的缓存在某处。
然后我又做了一些修改,想出了这个 gem:
def get_now():
now = datetime.now()
print(id(now))
return now
print(get_now() == get_now())
exit()
现在我们得到了不同的 ID,并且输出始终是 False
,就好像调用 get_now
两次的开销足以让缓存机制了解时间的变化和需要创建新对象。
我环顾四周 datetime.py并且找不到任何可以解释这种行为的东西,所以我想(如果它存在的话)它是在 C 级别实现的。
官方 datetime docs 中根本没有提到“缓存”一词(或其任何结合词) .
最佳答案
没有进行缓存。您的代码大致相当于:
temp = datetime.now()
id1 = id(temp)
temp = None
temp = datetime.now()
id2 = id(temp)
print(id1 == id2)
在获取 ID 后清除变量允许第一个 datetime
对象被垃圾收集。第二个 datetime
对象重用该内存,因此它们获得相同的 ID。
如果你改写
temp1 = datetime.now()
temp2 = datetime.now()
print (id(temp1) == id(temp2))
你会发现它们是不同的。
关于python - 是否缓存了日期时间对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57962528/