繁体   English   中英

del运算符如何在python中的列表中工作?

[英]How does del operator work in list in python?

我已经阅读了python docs for list以及del运算符的工作原理,但我需要解释以下行为

在这种情况下, cl指向同一个对象(列表),因此对一个对象进行更改会影响另一个对象,但删除一个对象不会删除对象。 那么这里发生了什么? 只是pointer列表对象的pointer丢失了吗?

>>> l = [1,2,3]
>>> c = l
>>> c.append(4)
>>> c
[1, 2, 3, 4]
>>> l
[1, 2, 3, 4]
>>> del c
>>> l
[1, 2, 3, 4]
>>> c
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined

通过切片操作删除

>>> l
[1, 2, 3, 4]
>>> del l[::2]
>>> l
[2, 4]

l[::2]返回新列表。 del l[::2]进行就地删除。 那么在这种情况下,是不是要返回一个新列表? 到底发生了什么?

lc 绑定到同一个对象。 它们都是对列表的引用,并且通过两个引用可以看到操作该列表对象。 del c unbinds c ; 它删除了对列表的引用。

del l[::2] 从列表中删除一组特定的索引,您现在正在列表对象本身上操作 您还没有解除绑定l ,你是名单解除绑定指数。

您也可以将其与检索和设置值进行比较。 print cprint c[::2]不同, c = something不同于c[::2] = something ; 两个示例中的第一个仅访问列表对象,或者为c分配新值,后面的示例检索一个值切片或将新值设置为切片索引。

在引擎盖下, del c从处理所有变量的字典中删除名称cglobals()为您提供对该字典的引用)。 del l[::2]在列表中调用__delitem__特殊方法 ,传入slice()对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM