python - 是否缓存了日期时间对象?

标签 python datetime

我正在研究如何从

中获取 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/

相关文章:

Python 3.6 - 将包含类型 'bytes' 的字典保存到文件

python - python中从下一个时间值中减去上一个时间值

c# - 组合时间范围

java - 将持续时间转换为季度

java - 解析日期时间字符串在索引 21 上给出错误

Python 2 到 3 转换 : iterating over lines in subprocess stdout

python - matplotlib funcanimation 更新函数被第一个参数调用两次

python - opencv 2.4.8未导入

python - 实现多处理以在 opencv 中同时测试两个视频以进行对象检测

python - 如何根据 python (Django) 中的日期时间范围过滤对象