是否已缓存日期时间对象?

Dee*_*ace 3 python datetime

我摆弄周围怎样才能获得False

print(datetime.now() == datetime.now())
Run Code Online (Sandbox Code Playgroud)

我想在每台“现代” /足够快的计算机上都是这样True

但是,我注意到了一些奇怪的地方:

print(id(datetime.now()) == id(datetime.now()))
Run Code Online (Sandbox Code Playgroud)

将不断输出True,这使我相信datetime对象(可能只是由创建的对象.now())会自动缓存在某个地方。

然后,我又进行了一些修改,想出了这个宝石:

def get_now():
    now = datetime.now()
    print(id(now))
    return now

print(get_now() == get_now())
exit()
Run Code Online (Sandbox Code Playgroud)

现在,我们获得了不同的ID,并且输出是恒定的False,好像get_now两次调用的开销足以使缓存机制了解更改的时间并需要创建一个新的对象。

我四处查看datetime.py,找不到任何能解释这种行为的东西,所以我想(如果它存在的话)是在C级实现的。

官方datetime文档上根本没有提到“缓存”(或它的任何共轭词)。

Bar*_*mar 7

没有缓存。您的代码大致相当于:

temp = datetime.now()
id1 = id(temp)
temp = None
temp = datetime.now()
id2 = id(temp)
print(id1 == id2)
Run Code Online (Sandbox Code Playgroud)

获取ID后清除变量datetime,可以垃圾回收第一个对象。第二个datetime对象重用该内存,因此它们获得相同的ID。

如果你写

temp1 = datetime.now()
temp2 = datetime.now()
print (id(temp1) == id(temp2))
Run Code Online (Sandbox Code Playgroud)

您会发现它们是不同的。