gpt4 book ai didi

python - del 语句会打开内存吗?

转载 作者:太空宇宙 更新时间:2023-11-03 19:52:35 25 4
gpt4 key购买 nike

我写了一个 python 脚本,可以在晚上 sleep 时备份我的文件。该程序设计为在计算机打开时运行,并在备份完成后自动关闭计算机。我的代码如下所示:

from datetime import datetime
from os import system
from backup import backup

while True:
today = datetime.now()

# Perform backups on Monday at 3:00am.
if today.weekday() == 0 and today.hour == 3:
print('Starting backups...')

# Perform backups.
backup("C:\\Users\\Jeff Moorhead\\Desktop", "E:\\")
backup("C:\\Users\\Jeff Moorhead\\Desktop", "F:\\")
backup("C:\\Users\\Jeff Moorhead\\OneDrive\\Documents", "E:\\")
backup("C:\\Users\\Jeff Moorhead\\OneDrive\\Documents", "F:\\")

# Shutdown computer after backups finish.
system('shutdown /s /t 10')
break

else:
del today
continue

备份功能来 self 编写的另一个文件,用于根据具体情况执行更多自定义备份。这段代码工作得很好,但我想知道 del 语句是否有效

del today

确实有必要。我认为它可以防止我的内存被数千个日期时间对象填满,但后来我读到 Python 使用垃圾收集,类似于 Java。此外,每次通过 while 循环时,today 变量是否会自动被替换?我知道该程序按 del 语句的预期工作,但如果没有必要,那么我想删除它,只是为了简洁!它对内存的实际影响是什么?

最佳答案

I put it in thinking that it would prevent my memory from getting filled up by thousands of datetime objects

del 语句不是必需的,您可以简单地删除该 block 。 Python 将自动释放这些局部变量的空间。

... but then I read that Python uses garbage collection, similar to Java.

上面的说法是错误的:这与垃圾收集器无关,垃圾收集器的存在是为了打破循环引用。在 CPython 中,当对象引用计数减少到零时,内存就会被释放,即使禁用垃圾收集器也会发生这种情况。

Further, does the today variable automatically get replaced with each pass through the while loop? I know that the program works as intended with the del statement, but if it is unnecessary, then I would like to get rid of it if only for the sake of brevity! What are it's actual effects on memory?

循环的每次迭代都会创建一个新的日期时间对象。作用域中的今天名称将反弹到新创建的日期时间实例。旧的 datetime 实例将被删除,因为它不存在任何引用(因为一旦将名称 today 反弹到另一个对象,唯一现有的引用就会丢失)。我再次强调,这只是引用计数,与gc无关。 .

在一个不相关的说明中,您的程序将忙于循环并通过此 while 循环消耗整个 CPU。您应该考虑在循环中添加对 time.sleep 的调用,以便进程大部分时间保持空闲状态。或者,更好的是,使用 cron 安排任务定期运行。 .

关于python - del 语句会打开内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59739460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com