【问题标题】:why del keyword does not delete a list when passed to a function为什么 del 关键字在传递给函数时不会删除列表
【发布时间】:2018-04-05 05:36:36
【问题描述】:

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

【问题讨论】:

  • 因为它删除的是名称,而不是对象。
  • 可以,但只在函数内部
  • 你怎么打电话给func
  • 因为你已经定义 func,但你还没有执行它;-)此外,del a 从名称中删除a func 的空间,列表对象仍然存在,因为它仍然在 main 的名称空间中被引用。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 所以,我删除了名称,但没有删除实际对象!谢谢。
猜你喜欢
  • 2015-09-21
  • 1970-01-01
  • 2019-03-27
  • 2020-09-27
  • 2017-04-03
  • 2011-07-19
  • 1970-01-01
  • 2010-09-24
相关资源
最近更新 更多