Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当内存中的Python列表对象从变量中取消引用时,会发生什么情况?_Python_List_Memory - Fatal编程技术网

当内存中的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

当内存中的Python列表对象从变量中取消引用时,会发生什么情况

范例

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()
函数。