我已经阅读了python docsfor list和del运算符的工作方式,但我需要解释以下行为
在这种情况下,c并l指向同一个对象(列表),因此对一个进行更改会影响另一个,但删除一个不会删除该对象.那么这里发生了什么?这只是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
Run Code Online (Sandbox Code Playgroud)
>>> l
[1, 2, 3, 4]
>>> del l[::2]
>>> l
[2, 4]
Run Code Online (Sandbox Code Playgroud)
l[::2]返回新列表.但是del l[::2]就地删除.那么在这种情况下,是不是要返回一个新列表?到底发生了什么?
Mar*_*ers 14
l并且c被绑定到相同的对象.它们都是对列表的引用,并且通过两个引用可以看到操作该列表对象.del c 解除绑定 c ; 它删除了对列表的引用.
del l[::2]从列表中删除一组特定的索引,您现在正在列表对象本身上操作.你是不是解除绑定l,你是解除绑定指数里面的名单.
您也可以将其与检索和设置值进行比较.print c不同于print c[::2]和c = something不同于c[::2] = something; 两个示例中的第一个仅访问列表对象,或者为其分配新值c,后者示例检索一个值切片或将新值设置为切片索引.
在引擎盖下,从处理所有变量的字典中del c删除名称c(globals()为您提供对该字典的引用).del l[::2]调用列表上的__delitem__特殊方法,传入一个slice()对象.