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

时间:2017-10-24 12:10:00

标签: python pass-by-reference pass-by-value

在以下代码中,当我使用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! 

1 个答案:

答案 0 :(得分:2)

这是一个对象的问题以及用于引用所述对象的名称, 你的问题非常相似(除了在你的问题中,名称存在于不同的名称空间中)到下面的一个:

a = [1, 2]
b = a
b.append(3)
del b
你认为你删除了列表对象吗?不。另一个域的另一个类比,shell

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