【问题标题】:rm() function of r alternative in pythonpython中r替代的rm()函数
【发布时间】:2017-06-06 05:41:55
【问题描述】:

如何删除python中的变量以清除python中的ram内存?

R

a = 2 
rm(a)

Python

a = 2

如何清除单个变量或一组变量?

【问题讨论】:

    标签: python r data-munging


    【解决方案1】:

    python 内存清理由垃圾收集器管理。在 CPython 上,它基于引用计数。 您可以像这样显式调用垃圾收集器:

    import gc
    gc.collect()
    

    这可以在调用使用 ram 方面的大变量的函数后完成。 请注意,您不必显式调用此函数,因为最终会调用垃圾收集器来自动释放内存。

    如果您仍想显式删除变量,可以使用del 语句(如前所述),如下所示:

    x = [1, 2, 3]
    i = 42
    s = 'abc'
    
    del s  # delete string
    del x[1]  # delete single item in a list
    del x, i  # delete multiple variables in one statement
    

    del 声明

    为了更好地理解 del 的作用及其局限性,让我们看看 python 如何在 ram 上存储变量。

    x = [1, 2, 3]
    

    上面的代码在名称x 到存储在堆上的列表[1, 2, 3] 之间创建了一个引用。 x 只是指向该列表的指针。

    x = [1, 2, 3]
    y = x
    x is y  # True
    

    在这个例子中,我们有引用x 和堆上的列表[1, 2, 3],但是这个新的y 变量是什么?它只是另一个指针,这意味着现在我们有两个指向同一个 [1, 2, 3] 列表的指针。

    回到del 语句,如果我们删除一个变量,它不会影响列表或其他变量

    x = [1, 2, 3]
    y = x
    del x
    print(y)  # prints [1, 2, 3]
    

    所以这里我们不会释放列表,只会减少对列表的引用计数,但我们仍然有 y 指向它。

    为了克服这个问题,我们可以使用weakref 模块将y 指向列表,当x 被删除时,列表也会被删除。

    底线

    • 在繁重的记忆功能后使用gc.collect()
    • 使用del x, y 删除所有指向特定对象的指针以释放它
    • 使用weakref 模块避免在删除所有其他对对象的引用后将对象保留在内存中

    【讨论】:

    • 谢谢。函数呢?它也适用于 del 吗?
    【解决方案2】:

    使用del

    >>> a=2
    >>> del a
    >>> a
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'a' is not defined
    

    【讨论】:

    • 如何对一组变量执行此操作,我们可以一次删除 5 个变量
    • @konerunikhil 您是否尝试过类似以下的操作:给定a = 3b = {'a': 1, 'b': 2},然后是del a, b?这将删除 ab
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2019-11-06
    • 2016-06-16
    • 2013-07-05
    • 1970-01-01
    相关资源
    最近更新 更多