为什么 del 关键字在传递给函数时不删除列表

why del keyword does not delete a list when passed to a function

在下面的代码中,当我使用del关键字删除形式参数a,然后在函数外打印它时,传递的列表仍然存在。

lst = [1,2,3]
def func(a):
    print lst
    lst.append(4) #this is modified as it is by default passed by reference
    print lst
    print locals
    del a # this does not delete the lst! why?
    print locals
func(a)
print lst #still exists! 

这是一个对象和您用来引用该对象的名称的问题, 您的问题与以下问题非常相似(除了在您的问题中名称位于不同的名称空间中):

a = [1, 2]
b = a
b.append(3)
del b

您认为您删除了列表对象吗?不。另一个域的另一个类比,shell

$ echo 1 > a
$ ln a b
$ echo 2 >> b
$ rm b
$ cat a