垃圾回收None - del 差异
Garbage collection None - del difference
python中的a = None
和del a
在逻辑上有区别吗?
None关键字用于定义空变量或对象。在python中,None关键字是一个对象,它是classNone类型的数据类型。
del 关键字用于删除对象。
如果我使用手动垃圾收集,它们是否相同?
不,None
仍然是一个对象(类型NoneType
),它占用内存并且可以被引用,而del
从名称space中删除对象的名称.
比如说,您在全局范围内创建了一个变量 a = None
。它将存在于 globals()
。现在,如果您使用 del a
删除它,对 a
的引用将不复存在。
轻松展现自己的不同之处:
a = 5
a = None
print(a == 5)
# False
del a
print(a == 5)
# Traceback (most recent call last):
# File "<input>", line 1, in <module>
# NameError: name 'a' is not defined
换句话说,a = None
仍然在您的会话中保留名称 a
。 del a
相比之下完全杀死了名称,如果您尝试引用它,您将得到一个 NameError
。
python中的a = None
和del a
在逻辑上有区别吗?
None关键字用于定义空变量或对象。在python中,None关键字是一个对象,它是classNone类型的数据类型。
del 关键字用于删除对象。
如果我使用手动垃圾收集,它们是否相同?
不,None
仍然是一个对象(类型NoneType
),它占用内存并且可以被引用,而del
从名称space中删除对象的名称.
比如说,您在全局范围内创建了一个变量 a = None
。它将存在于 globals()
。现在,如果您使用 del a
删除它,对 a
的引用将不复存在。
轻松展现自己的不同之处:
a = 5
a = None
print(a == 5)
# False
del a
print(a == 5)
# Traceback (most recent call last):
# File "<input>", line 1, in <module>
# NameError: name 'a' is not defined
换句话说,a = None
仍然在您的会话中保留名称 a
。 del a
相比之下完全杀死了名称,如果您尝试引用它,您将得到一个 NameError
。