Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python del语句是否打开内存?_Python_Del - Fatal编程技术网

Python del语句是否打开内存?

Python del语句是否打开内存?,python,del,Python,Del,我写了一个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

我写了一个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
这是非常必要的。我认为这可以防止我的内存被数千个datetime对象填满,但后来我看到Python使用垃圾收集,类似于Java。此外,现在的
变量是否会自动替换为while循环中的每次传递?我知道这个程序按照del语句的预期工作,但是如果它是不必要的,那么我想去掉它,如果只是为了简洁!它对记忆的实际影响是什么

我认为这可以防止我的记忆被成千上万的datetime对象填满

del
语句不是必需的,您只需删除该块即可。Python将自动从这些局部变量中释放空间

。。。但后来我读到Python使用垃圾收集,类似于Java

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

此外,today变量是否会自动替换为while循环中的每个过程?我知道这个程序按照del语句的预期工作,但是如果它是不必要的,那么我想去掉它,如果只是为了简洁!它对记忆的实际影响是什么

循环的每次迭代都会创建一个新的datetime对象。 范围中的
名称将反弹到新创建的datetime实例。旧的datetime实例将被删除,因为其上不存在引用(因为一旦您将名称
恢复到另一个对象,唯一现有的引用将丢失)。我再次强调,这只是参考计数,与此无关


另一方面,您的程序将在这个while循环中忙循环并消耗整个CPU。您应该考虑向代码< >时间>睡眠>代码>添加到循环中,这样进程将保持空闲。或者,更好的做法是,使用计划定期运行任务。

不,它没有。它只会减少对象的引用计数。如果您想释放内存,请参阅基于该帖子,垃圾收集器似乎会自动为我处理它。因为我没有处理海量数据,所以我应该没有问题。谢谢你不会占用大量的内存,但会占用大量的CPU,当你实际上每周只做一件事时,尽可能频繁地检查时间,你可能只需要计算时间,直到你想执行备份,然后执行
time.sleep
直到那时。很好,我添加了一个对time.sleep()的调用每小时检查一次时间。我不想增加一天的睡眠时间,因为我倾向于在大多数晚上关闭笔记本电脑,这样如果在周一3:00睡觉,电脑可能会错过备份时间。“旧的datetime实例将被删除…”正是我想要的。非常感谢。