[PYTHON] 파이썬에서 list와 list [:]의 차이점은 무엇입니까?
PYTHON파이썬에서 list와 list [:]의 차이점은 무엇입니까?
파이썬에서 list와 list [:]의 차이는 무엇입니까?
해결법
-
==============================
1.읽을 때 list는 원래 목록에 대한 참조이고 list [:]는 목록을 얕게 복사합니다.
읽을 때 list는 원래 목록에 대한 참조이고 list [:]는 목록을 얕게 복사합니다.
할당 할 때 이름을 나열 (다시)하고 [:] slice-assigns를 나열하여 이전에 목록에 있었던 것을 대체합니다.
또한 목록이 내장 된 것을 가리 키기 때문에 이름으로 사용하지 마십시오.
-
==============================
2.후자는 목록에 대한 참조가 아니라 목록의 복사본에 대한 참조입니다. 그래서 매우 유용합니다.
후자는 목록에 대한 참조가 아니라 목록의 복사본에 대한 참조입니다. 그래서 매우 유용합니다.
>>> li = [1,2,3] >>> li2 = li >>> li3 = li[:] >>> li2[0] = 0 >>> li [0, 2, 3] >>> li3 [1, 2, 3]
-
==============================
3.첫 번째 목록을 변수에 적용하려면 원래 목록에 대한 참조가 만들어집니다. 두 번째 목록 [i]은 얕은 복사본을 만듭니다.
첫 번째 목록을 변수에 적용하려면 원래 목록에 대한 참조가 만들어집니다. 두 번째 목록 [i]은 얕은 복사본을 만듭니다.
예 :
foo = [1,2,3] bar = foo foo[0] = 4
bar 및 foo는 다음과 같습니다.
[4,2,3]
그러나:
foo = [1,2,3] bar = foo[:] foo[0] = 4
결과는 다음과 같습니다.
bar == [1,2,3] foo == [4,2,3]
: 슬라이스입니다.
-
==============================
4.그러나 목록 요소 자체가 목록 인 경우 list1 = list [:]도 문제가 있습니다. 중히 여기다:
그러나 목록 요소 자체가 목록 인 경우 list1 = list [:]도 문제가 있습니다. 중히 여기다:
>>> a = [[1,2,3],[4,5,6],[7,8,9]] >>> b = a[:] >>> b[0].remove(2) >>> b [[1, 3], [4, 5, 6], [7, 8, 9]] >>> a [[1, 3], [4, 5, 6], [7, 8, 9]]
이것은 b에 복사되는 각 목록 요소가 목록 자체이기 때문에 발생하며 목록의 복사에는 일반 list1 = list2에서 발생하는 것과 동일한 문제가 포함됩니다. 내가 찾은 가장 짧은 방법은이 방법으로 모든 목록 요소를 명시 적으로 복사하는 것입니다.
>>> a = [[1,2,3],[4,5,6],[7,8,9]] >>> b=[[j for j in i] for i in a] >>> b [[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> b[0].remove(2) >>> b [[1, 3], [4, 5, 6], [7, 8, 9]] >>> a [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
물론, 중첩 목록에 중첩의 모든 추가 학위 들어, 복사 코드는 추가 인라인 for 루프에 의해 깊어.
-
==============================
5.li [:] 원래 목록의 복사본을 만듭니다. 그러나 동일한 목록 객체를 참조하지는 않습니다. 따라서 li [:]로 작성된 사본을 변경하여 원래 목록을 변경할 위험이 없습니다.
li [:] 원래 목록의 복사본을 만듭니다. 그러나 동일한 목록 객체를 참조하지는 않습니다. 따라서 li [:]로 작성된 사본을 변경하여 원래 목록을 변경할 위험이 없습니다.
예 :
>>> list1 = [1,2,3] >>> list2 = list1 >>> list3 = list1[:] >>> list1[0] = 4 >>> list2 [4, 2, 3] >>> list3 [1, 2, 3]
여기서 list2는 list1을 변경하여 변경되지만 list3은 변경되지 않습니다.
-
==============================
6.첫 번째 목록은 원래 목록을 참조합니다. 두 번째는 원래 목록의 복사본을 가리 킵니다. 이것 좀 봐!
첫 번째 목록은 원래 목록을 참조합니다. 두 번째는 원래 목록의 복사본을 가리 킵니다. 이것 좀 봐!
>>> a = [1, 2, 3] >>> b = a >>> c = a[:] >>> a == b True >>> a is b True >>> a == c True >>> a is c False >>> a.__repr__ <method-wrapper '__repr__' of list object at 0x7f87a9ba3688> >>> a.__repr__() '[1, 2, 3]' >>> b.__repr__ <method-wrapper '__repr__' of list object at 0x7f87a9ba3688> >>> c.__repr__ <method-wrapper '__repr__' of list object at 0x7f87ad352988>
a와 b는 주소 0x7f87a9ba3688을 가리키고, c는 0x7f87ad352988을 가리 킵니다. 그 차이는 명백합니다. a와 b는 모두 원래 목록 개체를 참조합니다. 반면 c는 원본 목록의 복사본을 가리키며 따라서 다른 위치에 있습니다.
from https://stackoverflow.com/questions/4081561/what-is-the-difference-between-list-and-list-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Flask 요청을 threaded = True와 동시에 처리합니다. (0) | 2018.10.13 |
---|---|
[PYTHON] Python에서 셀렌을 사용하여 경고가 있는지 확인하십시오. (0) | 2018.10.13 |
[PYTHON] 파이썬에서 for 루프 (0) | 2018.10.13 |
[PYTHON] r 및 rb 모드에서 텍스트 파일 구문 분석의 차이점 (0) | 2018.10.13 |
[PYTHON] 사전에 삽입 된 순서대로 항목을 검색하는 방법은 무엇입니까? (0) | 2018.10.13 |