【问题标题】:The concept under the hood about "delete" in PythonPython 中关于“删除”的概念
【发布时间】:2021-07-12 10:05:39
【问题描述】:

我创建了一个变量temp = [10]

然后我将temp 放入另一个列表变量ls

之后,我使用del temp 删除temp 变量

但是,我检查了ls,仍然发现[10]ls

在我的直觉中,ls 应该打印为[],但事情并非如此。

我想问一下Python中del的深层概念,以及Python中引用复制和值复制的一些信息

我的代码:

temp = [10]
print('id of temp:', id(temp))

ls = [temp]
print('ls before del:', ls)  # ls before del: [[10]]

del temp
print('ls after del:', ls)  # ls after del: [[10]]
print('id of ls[0]:', id(ls[0]))

【问题讨论】:

  • 强制链接到Ned Batchelder
  • 在您的情况下,您只是删除了 name temp,因此它变成了一个未知名称。您保留名称 ls 不变,它继续引用您在第一行创建的单个元素列表 [10]
  • @AlexanderL.Hayes __del__ 什么对象的方法?
  • @AlexanderL.Hayes del 仅删除对对象的引用(名称,...),并且仅在对象本身被销毁时才调用 __del__ 方法(当有不再引用它,否则它会被垃圾收集)。因此,只要有其他对对象的引用,del 就会删除一个名称,而不会调用 __del__

标签: python python-3.x python-3.7 del


【解决方案1】:

我不建议在 list 上使用 del 而使用 pop 或 remove。

删除

nums = ['1','2']
# remove '2'
nums.remove('2')

输出

['1']

流行音乐

nums = ['1','2']
# remove with index of 0
nums.pop(0)

输出

['2']

您的情况

firstList = [1]
secondList = [firstList] #[[1]]
print(secondList.pop(0))
#or
print(secondList.remove(firstList))

【讨论】:

  • 我知道有更好的方法来删除列表的元素,但我想知道“del”的细节
最近更新 更多