복붙노트

[PYTHON] 파이썬에서 list와 list [:]의 차이점은 무엇입니까?

PYTHON

파이썬에서 list와 list [:]의 차이점은 무엇입니까?

파이썬에서 list와 list [:]의 차이는 무엇입니까?

해결법

  1. ==============================

    1.읽을 때 list는 원래 목록에 대한 참조이고 list [:]는 목록을 얕게 복사합니다.

    읽을 때 list는 원래 목록에 대한 참조이고 list [:]는 목록을 얕게 복사합니다.

    할당 할 때 이름을 나열 (다시)하고 [:] slice-assigns를 나열하여 이전에 목록에 있었던 것을 대체합니다.

    또한 목록이 내장 된 것을 가리 키기 때문에 이름으로 사용하지 마십시오.

  2. ==============================

    2.후자는 목록에 대한 참조가 아니라 목록의 복사본에 대한 참조입니다. 그래서 매우 유용합니다.

    후자는 목록에 대한 참조가 아니라 목록의 복사본에 대한 참조입니다. 그래서 매우 유용합니다.

    >>> li = [1,2,3]
    >>> li2 = li
    >>> li3 = li[:]
    >>> li2[0] = 0
    >>> li
    [0, 2, 3]
    >>> li3
    [1, 2, 3]
    
  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. ==============================

    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. ==============================

    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. ==============================

    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는 원본 목록의 복사본을 가리키며 따라서 다른 위치에 있습니다.

  7. from https://stackoverflow.com/questions/4081561/what-is-the-difference-between-list-and-list-in-python by cc-by-sa and MIT license