为何执行del list2后,print(list1)仍输出[1,2]?
Python中del变量后另一个引用仍能访问对象的原因
先看你的代码:
list2=[1,2] list1=list2 del list2 print(list1)
你疑惑的核心是对Python变量与对象关系的理解偏差——Python的变量本质是指向对象的引用,而非直接存储对象本身。
拆解代码执行的完整逻辑:
list2=[1,2]:在内存中创建了一个列表对象[1,2],list2这个变量只是指向该对象的"引用标记"。list1=list2:让list1也指向同一个列表对象,此时这个对象有两个引用(list1和list2)。del list2:只是销毁了list2这个引用变量,并没有删除它指向的列表对象。只要还有其他引用(比如list1)指向该对象,Python的垃圾回收机制就不会清理这个对象。- 所以
print(list1)仍能输出[1,2],因为list1还在指向那个列表对象。
补充:如果想让原列表对象被内存回收,需要让所有指向它的引用都消失——比如执行del list1,或者给list1赋值其他内容(如list1 = None),此时没有任何引用指向原列表,垃圾回收才会释放它占用的内存。
内容的提问来源于stack exchange,提问作者Chane
相关产品推荐
相关产品推荐

