为什么 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
在下面的代码中,当我使用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