首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中r alternative的rm()函数

python中r alternative的rm()函数
EN

Stack Overflow用户
提问于 2017-01-21 08:10:34
回答 2查看 3.4K关注 0票数 8

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

R

代码语言:javascript
复制
a = 2 
rm(a)

Python

代码语言:javascript
复制
a = 2

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-21 09:05:22

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

代码语言:javascript
复制
import gc
gc.collect()

这可以在调用一个函数之后完成,该函数以ram的形式使用较大的变量。请注意,您不必显式调用此函数,因为垃圾收集器最终将被调用以自动释放ram。

如果仍然希望显式删除变量,可以使用德尔语句(如前面所写),如下所示:

代码语言:javascript
复制
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上存储变量的。

代码语言:javascript
复制
x = [1, 2, 3]

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

代码语言:javascript
复制
x = [1, 2, 3]
y = x
x is y  # True

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

返回到del语句,如果删除一个变量,它不会影响列表或另一个变量

代码语言:javascript
复制
x = [1, 2, 3]
y = x
del x
print(y)  # prints [1, 2, 3]

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

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

底线

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

Stack Overflow用户

发布于 2017-01-21 08:12:08

使用del

代码语言:javascript
复制
>>> a=2
>>> del a
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41777119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档