코딩 테스트를 위해이 질문을 받았지만 대답을 알지 못했습니다. 누구든지 아이디어가 있습니까?[:] = b와 a = b [:]의 차이점은 무엇입니까? (Python)
답변
[:]
은 슬라이스 연산자입니다.
왼쪽에 있으면 새 참조를 만들지 않고 목록의 내용을 덮어 씁니다.
오른쪽에 있으면 동일한 내용의 목록 사본이 생성됩니다.
오호 오케이 지금은 이해가됩니다. 명확히하기 위해, id (a)는 [:] = b 일 때 바뀌지 않습니다. id (a)는 a = b [:]를 수행 할 때 변경됩니다. 사람이 다른 사람보다 낫을 수있는 이유가 있습니까? – user701632
예, 정확히 알고 있습니다. 'c'도'a'와 같은리스트를 참조한다면, 두 변수가 업데이트 된리스트를 참조하도록 내용을 변경하고자 할 수 있습니다. – recursive
두 경우 모두 a
이 목록 b
의 사본이됩니다. 그러나이를 달성하는 데 사용 된 방법이 변경되었습니다.
a[:] = b
a
의 차이는 우리가 수정 한 여부 목록을
a = b[:]
이 b
의 카피 인, 새로운 목록을 생성 b
과 같은 요소를 가지고 있으며, 대체 있도록 목록 a
을 수정 기존 목록 또는 새 목록을 만들었습니다.
a = range(3)
b = range(4)
c = a # c and a now share the same list
a[:] = b
print "a", a
print "b", b
print "C", c
세 가지 목록이 동일한 출력 할 것이다 :
차이를 참조하십시오.a
이 이렇게 수정 된 그래서 C와 공유 같은 객체는
c
a = range(3)
b = range(4)
c = a # c and a now share the same list
a = b[:]
print "a", a
print "b", b
print "C", c
지금 C가 같은에서 인쇄되지 않습니다이었다. 할당 후 a
과 c
은 같은 개체를 공유하지 않았습니다.
Speedwise, a[:] = b' is probably a little faster then
a = b [:]`. 첫 번째 양식은 새 목록 개체를 만들 필요가 없으며 기존 목록을 수정하기 만하면됩니다. 이것의 중요한 부분은 새로운 메모리를 할당하는 대신 목록에 이미 소유 된 메모리를 재사용 할 수 있다는 것입니다.
a = b[:]
b
에 __getslice__
또는 __getitem__
을 호출하고 결과를 a
에 할당합니다. 거의 모든 경우 (예 : 목록, 튜플 및 기타 시퀀스 유형)이 경우 시퀀스의 얕은 사본이됩니다. 그 동작을 구현하지 않는 클래스에 대해서는 잘 모르겠지만 뭔가 다른 것을 한 사용자 정의 유형을 가질 수 있습니다. 이전에 a
의 이전 값을 참조한 다른 모든 오브젝트는 계속 이전 값을 참조합니다.
a[:] = b
반면에, 서열의 것과 b
a
의 요소의 일부를 대체하거나 __setslice__
__setitem__
부른다. 이 경우 a
의 시퀀스 유형이 정상적으로 작동하면 끝 점이없는 :
범위는 전체 시퀀스를 나타내므로 a
전체를 바꿉니다. 차이점은 튜플과 같은 불변 유형은 __setslice__
을 수행 할 수 없다는 것입니다 (예 : TypeError
예외 발생). 이전에 a
을 참조한 다른 모든 개체는 기본 개체가 수정되기 때문에 업데이트됩니다., a = b[:]
의 결과 b
의 얕은 복사되도록 a
에서 a[:] = b
동일 이도록 list
로 변경할 유형의
; tuple
과 같은 변경 불가능한 유형의 경우 a[:] = b
은 유효하지 않습니다. 잘못 행동 한 사용자 정의 유형의 경우 모든 베팅이 해제됩니다. a
과 동일한 객체를 참조하는 다른 객체에는 어떤 차이가 발생합니까? a = b[:]
과 함께 원래 값 (a
)을 참조하지만 a[:] = b
은 변경된 객체 (얕은 사본 b
)를 나타냅니다.
- 1. (a | b)가 a - (a & b) + b와 같은 이유는 무엇입니까?
- 2. '(a b c)와 ('a 'b'c ')의 차이점은 무엇입니까?
- 3. x = function (a, b, c) {}과 함수 x (a, b, c) {}의 차이점은 무엇입니까?
- 4. double a = a + int b와 int a + = double b의 차이점은 무엇입니까?
- 5. val b = a (a는 Array)와 val b = a.clone()의 차이점은 무엇입니까?
- 6. assertEqual과 assertIs (assertIs는 Python 2.7에서 처음 소개되었습니다)의 차이점은 무엇입니까?
- 7. 인 빠른 - $ 달러 (A $)의 B 또는
- 8. 정규 표현식에서 "a {1}"과 "a"의 차이점은 무엇입니까?
- 9. "a/b/c"를 [ "a/b/c", "a/b", "a"]로 변환하는 가장 쉬운 방법
- 10. "특성 A <: B"의 의미는 무엇입니까? 스칼라에서
- 11. "% A % B %"의 SQL LIKE 절에 해당하는 Java RegEx는 무엇입니까?
- 12. 정규식에서()와 []의 차이점은 무엇입니까?
- 13. 진술 클래스의 의미 a (b)
- 14. 파이썬 객체 혼동 : a = b, b 및 a 변경 수정!
- 15. A/B 테스트 통계
- 16. 'if (A && B)'문을 평가하는 방법은 무엇입니까?
- 17. PHP 문자열 연결 - "$ a $ b"와 $ a. "". $ b - 성능
- 18. C# 배열 [a, b, c] 대 배열 [a] [b] [c]?
- 19. 고유 한 열 쌍을 A, B 또는 B, A
- 20. MySQL 수 행 a = b 및 b = a
- 21. 테스트 a & b == 0
- 22. A B 트리에
- 23. a = b = 5 - 불가능합니까?
- 24. 변수를 지정할 때 "="과 "= &"의 차이점은 무엇입니까?
- 25. 파이썬에서 ''와 ' "의 차이점은 무엇입니까?
- 26. App Engine에서의 A/B 테스트?
- 27. 모델 A :: B belongs_to foreign_key
- 28. 지원 방법 (a = b) = c?
- 29. '가져 오기'와 '가져 오기 *'의 차이점은 무엇입니까?
- 30. .lib와 .a 파일의 차이점은 무엇입니까?
가능한 [파이썬에서 목록과 목록 \ [: \]의 차이점은 무엇입니까?] (http://stackoverflow.com/questions/4081561/what-is-the-difference-between-list-and) -list-in-python) –
@Ignacio : 아니요, 이것은 중복이 아닙니다. 그 질문은'a [:] = b' 구조에 대한 언급을하지 않습니다. –
@ Adam : "할당 할 때 ..."시작하는 부분조차도 아닌가? –