del语句是否打开内存?
Does a del statement open up memory?
我写了一个 python 脚本来在我晚上睡觉时备份我的文件。该程序旨在 运行 只要计算机处于开启状态,并在备份完成后自动关闭计算机。我的代码如下所示:
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
备份功能来自我编写的另一个文件,用于根据具体情况执行更多自定义备份。这段代码一切正常,但我想知道 del 语句
del today
真的很有必要。我认为它可以防止我的内存被数千个日期时间对象填满,但后来我读到 Python 使用垃圾收集,类似于 Java。此外,today
变量是否会在每次通过 while 循环时自动被替换?我知道该程序使用 del 语句可以按预期工作,但如果没有必要,那么为了简洁起见,我想去掉它!它对记忆的实际影响是什么?
I put it in thinking that it would prevent my memory from getting filled up by thousands of datetime objects
del
语句不是必需的,您可以简单地删除该块。 Python 将自动从这些局部变量中释放 space。
... 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?
循环的每次迭代都会创建一个新的日期时间对象。
范围内的 today
名称将重新绑定到新创建的日期时间实例。旧的日期时间实例将被删除,因为它不存在任何引用(因为一旦您将名称 today
重新绑定到另一个对象,唯一的现有引用就会丢失)。再次强调,这只是引用计数,与 gc
.
无关
顺便提一下,您的程序将忙于循环并使用此 while 循环消耗整个 CPU。您应该考虑将对 time.sleep
的调用添加到循环中,以便进程大部分时间保持空闲状态。或者,更好的是,使用 cron
.
定期将任务安排到 运行
我写了一个 python 脚本来在我晚上睡觉时备份我的文件。该程序旨在 运行 只要计算机处于开启状态,并在备份完成后自动关闭计算机。我的代码如下所示:
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
备份功能来自我编写的另一个文件,用于根据具体情况执行更多自定义备份。这段代码一切正常,但我想知道 del 语句
del today
真的很有必要。我认为它可以防止我的内存被数千个日期时间对象填满,但后来我读到 Python 使用垃圾收集,类似于 Java。此外,today
变量是否会在每次通过 while 循环时自动被替换?我知道该程序使用 del 语句可以按预期工作,但如果没有必要,那么为了简洁起见,我想去掉它!它对记忆的实际影响是什么?
I put it in thinking that it would prevent my memory from getting filled up by thousands of datetime objects
del
语句不是必需的,您可以简单地删除该块。 Python 将自动从这些局部变量中释放 space。
... 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?
循环的每次迭代都会创建一个新的日期时间对象。
范围内的 today
名称将重新绑定到新创建的日期时间实例。旧的日期时间实例将被删除,因为它不存在任何引用(因为一旦您将名称 today
重新绑定到另一个对象,唯一的现有引用就会丢失)。再次强调,这只是引用计数,与 gc
.
顺便提一下,您的程序将忙于循环并使用此 while 循环消耗整个 CPU。您应该考虑将对 time.sleep
的调用添加到循环中,以便进程大部分时间保持空闲状态。或者,更好的是,使用 cron
.