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