2014-04-26 2 views
3

많은 사람들이 목록을 비우기 위해 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 
[] 
>>> 
+0

첫 번째 대신'del foo [:]'또는'foo.clear()'를 사용하고 싶습니다. – Veedrac

답변

4

list[:] = [] 수단은 RHS (이 경우에는 없음)에 반복 가능로부터 항목리스트의 모든 값을 대체하고, 해당 목록 개체의 모든 참조에 영향을줍니다. 반면에 list = []은 단순히 새로운 과제입니다.

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']) 
관련

: 나는 새로운 빈 상태 (empty)의리스트를 작성합니다 list=[]을하고 생각 What is the difference between a[:]=b and a=b[:]

+0

당신이 볼 수 있듯이, 이것은 나와 함께 대답 한 이전 게시물을 언급하고있었습니다 :) +1 –

2

list[:]=[] 여전히 같은 목록에 노력하고 있습니다.

 
>>> array=[] 
>>> id(array) 
32758680 
>>> array[:]=[] 
>>> id(array) 
32758680 
>>> array=[] 
>>> id(array) 
32758360 
>>> 
+0

좋은 지적, +1 :) –

관련 문제