python的类怎么释放_Python如何在处理后为类对象释放内存呢?(Python how to release the memory for class object after processi...

在Python中,当没有更多的引用指向一个对象时,该对象会被垃圾收集器自动释放内存。使用None关键字将对象赋值为None或者使用del关键字删除对象,都能减少对象的引用计数。如果这是对象的最后一个引用,那么内存将被释放。两者的主要区别在于,None会保留变量名但改变其绑定,而del会彻底删除变量,后续使用变量名会抛出NameError。选择哪个取决于后续代码的需求,两者对内存清理的影响相同。
摘要由CSDN通过智能技术生成

Python如何在处理后为类对象释放内存呢?(Python how to release the memory for class object after processing it?)

我使用None关键字删除一个类对象。

class demo:

class members

obj= demo()

some processing

obj=None

使用None ,是否会释放内存?

我发现del也可以用来删除一个类对象。或者我应该使用

del obj

释放记忆?

在删除类对象和释放内存或调用垃圾收集时使用del和None有什么区别?

I use None keyword to delete a class object.

class demo:

class members

obj= demo()

some processing

obj=None

By using None,will the memory be released?

I found that del can also be used to delete a class object.Or I should use

del obj

to release the memory?

What is the difference between using del and None in deleting a class object and releasing the memory or invoking garbage collection?

原文:https://stackoverflow.com/questions/29299106

2020-02-20 17:43

满意答案

当没有对该对象的更多引用时,将释放Python对象。

将obj重新绑定为None会减少对象的引用计数,因此del obj也是如此。 在这两种情况下 ,如果obj是对它的最后一个引用,则将清除该实例。

不同之处在于你以后如何使用obj 。 重新绑定保留变量(它现在绑定到None ), del完全删除它,你会得到一个NameError 。 你选择的是你的选择,它不会影响实例从内存中清除的方式。

Python objects are released when there are no more references to the object.

Rebinding obj to None would decrease the reference count to the object, and so would del obj. In both cases, the instance would be cleared if obj was the last reference to it.

The difference then is how you can use obj afterwards. Rebinding retains the variable (it is now bound to None), del removes it altogether and you'd get a NameError. What you pick is your choice, it won't have influence on how the instance is cleared from memory.

2015-03-27

相关问答

指针是一个局部变量,表示内存中的地址,而不是对象。 什么都没发布。 例如: int i = 1;

NSSomething *object = [[NSSomething alloc] init];

您现在在堆栈中有2个局部变量,一个是int类型,另一个是pointer to NSSomething的类型pointer to NSSomething 。 您还在堆中有一个新的NSSomething实例。 如果你现在只是return ,你的i和object变量将超出范围并消失,但堆中的NSSometh...

dict和keys都是对自动释放对象的引用。 您不应该释放它们,这将导致您的程序终止。 You Don't Own Objects Returned by Reference and You must not relinquish ownership of an object you do not own 那么对于局部变量,我们不需要在使用后释放它? 如果您拥有对象,则必须在不再需要它们时释放它们,无论其局部变量还是ivar都无关紧要。 阅读本文 - 高级内存管理编程指南 Both dict an...

你需要free字节,因为NSData没有获得它的所有权:它无法知道数组是临时的还是动态的,因此它会复制它。 要解决此问题,请替换 return [NSData dataWithBytes:bytes length:c];

同 NSData *res = [NSData dataWithBytes:bytes length:c];

free(bytes);

return res;

You need to free the bytes, because NSData does not take o...

答案是肯定的。 运行时使用[setValue:ForKey:]将对象连接到IBOutlet 。 此函数将查找私有实例变量,保留目标并将其设置为实例变量。 请访问iOS Developer Library以了解更多信息。 我强烈建议您阅读本文,因为许多iOS框架通过Key-Value合规性( [setValue:ForKey:]或[valueForKey:] )访问属性,而不是直接调用getters / setters / instance变量。 The answer is YES. The run...

您需要对Runtime Callable Wrapper有一个很好的理解,才能在.Net中使用COM。 基本上,你的.Net代码中的所有东西都是对COM对象的引用,实际上是对RCW的引用。 RCW通过计算引用的数量来管理底层COM对象的引用计数,当引用计数降到0时,它将调用Release (一次)在底层对象上。 当RCW处于活动状态时,它将在COM对象上保留一个引用。 ReleaseComObject API将RCW上的引用计数减少1.如果这将RCW上的引用计数设置为0,则RCW将在COM对象上调...

如果您使用imageNamed:消息创建图像,则不必释放它,因为您会收到自动释放的图像。 只有当您使用init ...:消息之一创建映像时,您必须稍后再释放它。 If you create an image with the imageNamed: message you don't have to release it, because you get an autoreleased image back. Only if you create the image with one of the...

这样没有垃圾收集。 严格来说,它是计算自己引用的对象。 创建对象时,它会给自己一个引用计数1.在这种情况下,创建对象的方法 - imageNamed: - 将对象放入自动释放池中。 这意味着池是1引用的所有者,它将在以后自动释放引用(在此方法完成之后)。 当一个对象的引用计数降为0时,它会通过运行dealloc方法来破坏它自己。 你发送retain到图像(由自动释放池拥有)意味着有另一个引用 - 另一个所有者 - (计数则为2,但你真的不应该考虑对象的内部绝对数,只是关于你的所有权)。 无论如何,...

Python有一个内置的垃圾收集器,可以自动释放你不再需要的变量所使用的内存。 所以,这应该不是内存的问题。 但是如果你没有关闭这些文件,它们仍然是开放的,它们的一些内容在内存中(Python解释器认为你将使用它们)。 首先,检查您是否正确关闭文件 f=open("file.txt")

a=f.read()

f.close()

甚至更好 with open("file.txt") as input:

data=input.read()

这里文件自动关闭。 如果你的一些变量变得非常大,你...

当没有对该对象的更多引用时,将释放Python对象。 将obj重新绑定为None会减少对象的引用计数,因此del obj也是如此。 在这两种情况下 ,如果obj是对它的最后一个引用,则将清除该实例。 不同之处在于你以后如何使用obj 。 重新绑定保留变量(它现在绑定到None ), del完全删除它,你会得到一个NameError 。 你选择的是你的选择,它不会影响实例从内存中清除的方式。 Python objects are released when there are no more ref...

没有真正看到你的程序...我建议你看看: 构建tkinter应用程序的最佳方法 如果您在服务器上运行进程,僵尸可能是一个问题,特别是如果服务器正在运行LINUX。 (在我的经验中) 需要看看你的代码, 博士 Without actually seeing your program...I would suggest that you look at: Best way to structure a tkinter application Zombies could be a problem if ...

相关文章

https://github.com/nathanmarz/storm/wiki/Guaranteei

...

Some might also contend that inheritance should be

...

Understanding the Basics of Working in a Garbage-Co

...

http://engineering.linkedin.com/data-streams/apache

...

在Java中Object类是所有类的父类,其中有几个需要override的方法比如equals,h

...

http://spark-project.org/ 项目首页 http://shark.cs.berk

...

Ready to unlock the power of your data? With this c

...

一、storm nimbus 单节点问题概述 1、storm集群在生产环境部署之后,通常会是如下的结构

...

.net的动态编译功能很好,但是有个问题,动态编译的代码,每次执行后,都会产生一个新的assembly

...

原文地址:http://blog.chinaunix.net/uid-25525723-id-3630

...

最新问答

如果启用了复制处理程序,请确保将其置于其中一个安全角色之后。 我见过人们做的另一件事是在不同的端口上运行admin。 最好在需要auth的页面上使用SSL,这样你就不会发送明确的密码,因此管理和复制将发生在8443上,而常规查询将在8080上发生。 如果您要签署自己的证书,请查看此有用的SO页面: 如何在特定连接上使用不同的证书? I didn't know that /admin was the context for SOLR admin because /admin does not re

第一:在您的样本中,您有: 但是你在询问 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大写'T')。 xpath区分大小写。 第二:通过查询// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一个'td'元素,而它们是兄弟姐妹。 有很多方法可以在这里获得制作和模型

这是你的答案: http://jsfiddle.net/gPsdk/40/ .preloader-container { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: #FFFFFF; z-index: 5; opacity: 1; -webkit-transition: all 500ms ease-out;

问题是,在启用Outlook库引用的情况下, olMailItem是一个保留常量,我认为当您将Dim olMailItem as Outlook.MailItem ,这不是问题,但是尝试设置变量会导致问题。 以下是完整的解释: 您已将olMailItem声明为对象变量。 在赋值语句的右侧,在将其值设置为对象的实例之前,您将引用此Object 。 这基本上是一个递归错误,因为你有对象试图自己分配自己。 还有另一个潜在的错误,如果之前已经分配了olMailItem ,这个语句会引发另一个错误(可能是

我建议使用wireshark http://www.wireshark.org/通过记录(“捕获”)设备可以看到的网络流量副本来“监听”网络上发生的对话。 当您开始捕获时,数据量似乎过大,但如果您能够发现任何看起来像您的SOAP消息的片段(应该很容易发现),那么您可以通过右键单击并选择来快速过滤到该对话'关注TCP Stream'。 然后,您可以在弹出窗口中查看您编写的SOAP服务与Silverlight客户端之间的整个对话。 如果一切正常,请关闭弹出窗口。 作为一个额外的好处,wireshar

Android默认情况下不提供TextView的合理结果。 您可以使用以下库并实现适当的aligntment。 https://github.com/navabi/JustifiedTextView Android Does not provide Justified aligntment of TextView By default. You can use following library and achieve proper aligntment. https://github.com/

你的代码适合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我将它下载到c:\ temp \ apples.java。 以下是我编译和运行的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV

12个十六进制数字(带前导0x)表示48位。 那是256 TB的虚拟地址空间。 在AMD64上阅读wiki(我假设你在上面,对吗?)架构http://en.wikipedia.org/wiki/X86-64 12 hex digits (with leading 0x) mean 48 bits. That is 256 TB of virtual address space. Read wiki on AMD64 (I assume that you are on it, right?) ar

这将取决于你想要的。 对象有两种属性:类属性和实例属性。 类属性 类属性对于类的每个实例都是相同的对象。 class MyClass: class_attribute = [] 这里已经为类定义了MyClass.class_attribute ,您可以使用它。 如果您创建MyClass实例,则每个实例都可以访问相同的class_attribute 。 实例属性 instance属性仅在创建实例时可用,并且对于类的每个实例都是唯一的。 您只能在实例上使用它们。 在方法__init__中定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值