【发布时间】:2021-07-12 10:05:39
【问题描述】:
我创建了一个变量temp = [10]
然后我将temp 放入另一个列表变量ls
之后,我使用del temp 删除temp 变量
但是,我检查了ls,仍然发现[10] 在ls 中
在我的直觉中,ls 应该打印为[],但事情并非如此。
我想问一下Python中del的深层概念,以及Python中引用复制和值复制的一些信息
我的代码:
temp = [10]
print('id of temp:', id(temp))
ls = [temp]
print('ls before del:', ls) # ls before del: [[10]]
del temp
print('ls after del:', ls) # ls after del: [[10]]
print('id of ls[0]:', id(ls[0]))
【问题讨论】:
-
强制链接到Ned Batchelder
-
在您的情况下,您只是删除了 name
temp,因此它变成了一个未知名称。您保留名称ls不变,它继续引用您在第一行创建的单个元素列表[10]。 -
@AlexanderL.Hayes
__del__什么对象的方法? -
@AlexanderL.Hayes
del仅删除对对象的引用(名称,...),并且仅在对象本身被销毁时才调用__del__方法(当有不再引用它,否则它会被垃圾收集)。因此,只要有其他对对象的引用,del就会删除一个名称,而不会调用__del__。
标签: python python-3.x python-3.7 del