python会自动删除对象吗?
我有一门课,像:python会自动删除对象吗?,python,Python,我有一门课,像: class MyClass: def __init__(self, data): self.client1 = ThirdPartyLib1.Client(data['a']) self.client2 = ThirdPartyLib2.Client(data['b']) self.client3 = MyClass2.Client(data['c']) def handle(self):
class MyClass:
def __init__(self, data):
self.client1 = ThirdPartyLib1.Client(data['a'])
self.client2 = ThirdPartyLib2.Client(data['b'])
self.client3 = MyClass2.Client(data['c'])
def handle(self):
#self.client1.xxx()
#....
和主要代码:
while not STOP:
data = SomeLib.get()
client = MyClass(data)
client.handle()
所以我的问题是客户端是否会自动删除?有内存泄漏吗
我是否需要在MyClass中创建\uuu del\uu
并调用
del self.client1
del self.client2
del self.client3
?
或者我需要在
client.handle()
之后添加del client
?否,没有内存泄漏,Python是一种内存管理语言\uuu del\uu
与del x
没有直接关系,而del x
所做的只是从本地命名空间中删除名称。如果一个对象仍然在其他地方被引用,它将仍然是活动的。CPython使用引用计数,因此当对象引用计数达到0时,它会立即被回收,但这是一个实现细节,您不必显式调用del client
将其从内存或堆栈中删除。当程序或执行代码停止运行特定的客户端
实例时,handle()
和传递给MyClass
的任何其他数据将从堆栈中删除。@FishingCode您确切指的是什么堆栈?@erip yeah,特别是在CPython中,当引用计数达到0时,一个对象会立即被回收,因此它看起来就像是在做什么,但是在Jython中,它取决于JVM垃圾收集器。这是对堆的引用。不,没有内存泄漏,Python是一个内存管理语言\uuu del\uu
与del x
没有直接关系,而del x
所做的只是从本地命名空间中删除名称。如果一个对象仍然在其他地方被引用,它将仍然是活动的。CPython使用引用计数,因此当对象引用计数达到0时,它会立即被回收,但这是一个实现细节,您不必显式调用del client
将其从内存或堆栈中删除。当程序或执行代码停止运行特定的客户端
实例时,handle()
和传递给MyClass
的任何其他数据将从堆栈中删除。@FishingCode您确切指的是什么堆栈?@erip yeah,特别是在CPython中,当引用计数达到0时,一个对象会立即被回收,因此它看起来就像是在做什么,但是在Jython中,它取决于JVM垃圾收集器。这是对堆的引用。