2017-05-09 3 views
0

여기의 목표는`[1,2,3,4] 목록을 얻고 다른 목록에 그대로 추가하는 것입니다. 목록 목록을 가질 수 있습니다.파이썬 목록을 하나의 엔트리로 다른 목록에 추가하십시오.

masterlist = [[1,2,3,4],[5,6,7,8],.....] 

그러나 나는이 권리를 얻을 수 없습니다.

내가 추가를 시도했는데 작동하지만 추가 한 목록에 대한 참조를 복사합니다. 값을 복사하지 않기 때문에 내가 추가 한 목록을 비우면 모든 것이 끝납니다. 삭제되었습니다.

list1 = [1,2,3,4] 

masterlist.append(list1) 

del list1[:] 
list1 = [5,6,7,8] 

masterlist.append(list1) 

이 목록을 갖는 masterlist에서이 결과,하지만 그들은 근본적으로 동일합니다, 그래서 같이 표시됩니다 : 내가 원하는 동안

[[5,6,7,8],[5,6,7,8]] 

[[1,2,3,4],[5,6,7,8]]

내가 사용하려고 않았다 확장하지만, 현재 목록의 모든 요소를 ​​다른 목록의 단일 항목으로 추가하므로 결국 끝납니다.

[1,2,3,4,5,6,7,8]

어떻게 목록에 추가 할 수 있습니까? 목록의 콘텐츠 자체가 아니라 참조가 필요합니까?

편집 : 이것은 심층 또는 얕은 복사와 관련된 질문이 아닙니다. 다른 연결된 질문은 유사하지만 내 문제를 해결하지 못했습니다. 내 경우 완벽하게 맞는 여기에 솔루션

+2

사본, [사본 만들기] (http://stackoverflow.com/questions/2612802/how-to-clone-or-copy-a-list). 파이썬은 암묵적으로 C++와 같은 곳곳에 복사본을 만들지 않습니다. – user2357112

+0

왜 '델'을 사용 했습니까? 어쨌든'copy'를 가져 와서 그것을 사용하여'list1'의 사본을 만들어 추가 할 수 있습니다. –

+0

또한, 'list1 = [5,6,7,8]'이 새 목록 객체를 만들기 때문에 게시 한 코드는 설명하는 결과를 생성하지 않습니다. 새로운 객체를 만드는 작업과 기존의 작업을 수정하는 작업에 익숙해 져야합니다. – user2357112

답변

2

당신이 할 수있는 참조 :

>>> masterlist = [[1,2,3,4],[5,6,7,8]] 
>>> list1 = [1,2,3,4] 
>>> masterlist[len(masterlist):]=[list1[:]] 
>>> del list1 
>>> masterlist 
[[1, 2, 3, 4], [5, 6, 7, 8], [1, 2, 3, 4]] 

또는

masterlist.append(list1[:]) 

또는 Python3 전용 : 추가하려면

masterlist.append(list1.copy()) 
+0

또는 단지'masterlist.append (list1 [:])'... 슬라이스/복사는 masterlist에 추가 된 익명 객체 (참조)로 발생합니다. –

+1

그게 다야! 그래서'[:]'을 사용할 때 실제로 목록 자체의 값을 추가하는 것이지 참조 값은 아닙니다. 감사! –

+0

또는'masterlist + = [list1 [:]]' –

관련 문제