我见过很多人使用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[:]=b
和a=b[:]
之间有什么区别
我认为执行list=[]
将创建一个新的空列表,而list[:]=[]
仍在处理同一列表。
>>>数组=[]>>>id(数组)32758680>>>array[:]=[]>>>id(数组)32758680>>>数组=[]>>>id(数组)32758360>>>