当内存中的Python列表对象从变量中取消引用时,会发生什么情况?
当内存中的Python列表对象从变量中取消引用时,会发生什么情况 范例当内存中的Python列表对象从变量中取消引用时,会发生什么情况?,python,list,memory,Python,List,Memory,当内存中的Python列表对象从变量中取消引用时,会发生什么情况 范例 A = ["A", "B"] print(A) A = [] A = None print(A) [“A”,“B”]会发生什么情况?不再有任何指向它们的引用的对象将被删除 CPython通过引用计数实现这一点;分配会增加引用计数,删除引用会减少引用计数。当计数达到0时,对象将自动删除 边缘情况是指对象直接或间接指向自身;例如,通过向自身添加列表: >>> a = [] >>> a.app
A = ["A", "B"]
print(A)
A = []
A = None
print(A)
[“A”,“B”]
会发生什么情况?不再有任何指向它们的引用的对象将被删除
CPython通过引用计数实现这一点;分配会增加引用计数,删除引用会减少引用计数。当计数达到0时,对象将自动删除
边缘情况是指对象直接或间接指向自身;例如,通过向自身添加列表:
>>> a = []
>>> a.append(a)
>>> a
[[...]]
此处的省略号表示参考循环。Python使用一个垃圾收集器来检测并打破这样的循环;它会定期运行,以查找其他对象未引用的对象图。它会被垃圾回收。释放内存以供其他puposes使用。在对对象调用垃圾回收之前,内存中存储了多少秒?取消引用意味着查找引用。你的意思是不再被引用吗?对不起,我想这就是我的意思,例如,它不再在程序中的任何地方使用。你知道为什么如果我不给A赋值,而我执行sys.getrefcount(A),它会重新调用5000吗?但是如果A=[]返回2?@MatthewduPlessis:
None
是一个单例对象,那么Python只有该对象的一个实例。你有5000个不同的参考资料。使用None
语法只会为您提供对该对象的另一个引用。@MatthewduPlessis:另一方面,您的[]
对象是一个单独的、唯一的实例a
是唯一的引用,第二个引用是Python堆栈,因为它将值传递给sys.getrefcount()
函数。