2012-03-04 3 views
2

가능한 중복 : 파이썬 빈리스트 트릭

왜 이런 일이 않습니다 내가 파이썬 목록에 대해 하나의 작은 문제를 가지고
Python list confusion

? 당신이 첫 번째 'x'에 추가 할 때

[]의 동일한 인스턴스가 중복되는
x = [[]] * 4 
x[0].append('x') -> [['x'], ['x'], ['x'], ['x']] 
+1

:

을 수행하는 올바른 방법은 명시 적마다 새로운 목록 인스턴스를 만드는 것입니다. 그리고 목록에 동일한 메모리 공간을 가리키는 4 개의 목록이 있으므로, 그 중 하나를 수정하면 변경 사항이 모두 영향을 미칩니다. – rubik

+0

또한 [이 파이썬 FAQ 항목] (http://docs.python.org/faq/programming.html#how-do-i-create-a-multidimensional-list) – BioGeek

+0

확인, 감사합니다 .. – cval

답변

6

, 그래서, 당신은 실제로 모두에 추가 - 그들은 모두 같은 객체이기 때문에! 당신이 네 번 같은 목록을 복사하기 때문에

x = [[] for _ in range(4)] 
+1

이 답변에 대한 가능한 해결책을 추가했습니다. 희망은 당신이 상관 없어 :) –

+0

고마워! 합리적으로 보입니다)) – cval

+0

명확해야 : 인스턴스 []이 (가) * 중복되지 않습니다 *. 표현식 [[]] * 4는 []의 동일한 인스턴스에 대한 네 개의 참조가있는 목록을 생성합니다. – alexis