这两种清除列表的方法有什么区别



我见过很多人使用list[:] = []list = []来清空列表。然而,两者之间的区别是什么?

list[:] = []:

>>> array = []
>>> array.append(9)
>>> array.append(4)
>>> array
[9, 4]
>>> array[:] = []
>>> array
[]

list = []:

>>> array = []
>>> array.append(9)
>>> array.append(4)
>>> array
[9, 4]
>>> array = []
>>> array
[]
>>> 

list[:] = []意味着用RHS上可迭代项中的项替换list的所有值(在这种情况下没有),它会影响该列表对象的所有引用。另一方面,CCD_ 6只是一个新的分配。

In [114]: a = b = [1, 2, 3]
In [115]: c = d = ['a', 'b', 'c']
In [116]: a[:] = []  
In [117]: a, b         #affects all references
Out[117]: ([], [])
In [118]: c = ['foo'] #decrements one reference count from the list pointed by `d`  
In [119]: c, d        #d is unaffected
Out[119]: (['foo'], ['a', 'b', 'c'])

相关:a[:]=ba=b[:] 之间有什么区别

我认为执行list=[]将创建一个新的空列表,而list[:]=[]仍在处理同一列表。

>>>数组=[]>>>id(数组)32758680>>>array[:]=[]>>>id(数组)32758680>>>数组=[]>>>id(数组)32758360>>>

最新更新