Python의 시퀀스 증분 할당에 대한 간략한 소개(예제 포함)

不言
풀어 주다: 2018-10-08 16:29:24
앞으로
3028명이 탐색했습니다.

이 기사는 Python의 시퀀스 증분 할당에 대한 간략한 소개를 제공합니다(예제 포함). 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

증분 할당 연산자는 +=이고 *=. += 뒤에 있는 특수 메서드는 __iadd__입니다. 클래스가 __iadd__ 메서드를 구현하지 않으면 Python은 한 걸음 물러나서 이를 호출합니다. __add__ 메소드. 이 두 메서드의 차이점은 __iadd__는 내부 변경이고 원래 값의 메모리 주소를 변경하지 않는 반면 __add__ 메서드는 새 개체를 가져옵니다.

다음 표현식을 고려하세요.

a += b

a가 __iadd__ 메서드를 구현하면 a가 그 자리에서 변경됩니다(메모리 주소는 변경되지 않은 상태로 유지됩니다). a가 __iadd__ 메서드를 구현하지 않으면 a += b 표현식의 효과는 a = a + b와 동일해지며 새 객체를 생성하고 이를 a에 할당합니다.

일반적으로 변경 가능한 시퀀스는 일반적으로 __iadd__ 메서드를 구현하므로 +=는 내부 추가인 반면 불변 시퀀스는 이 작업을 전혀 지원하지 않습니다.

*= 은 += 와 동일하지만 그 뒤에 있는 특별한 메소드가 __imul__이라는 점만 다릅니다.

a = [1, 2, 3]
b = [4, 5, 6]print("id(a) = %d" % id(a))
a += bprint("id(a) = %d" % id(a))

c = [1, 2, 3]print("id(c) = %d" % id(c))
c = c + bprint("id(c) = %d" % id(c))

d = (1, 2, 3)print("id(d) = %d" % id(d))
d *= 2print("id(d) = %d" % id(d))
로그인 후 복사

실행 결과는 다음과 같습니다.

id(a) = 1298277978824
id(a) = 1298277978824
id(c) = 1298277978696
id(c) = 1298277978632
id(d) = 1298277972872
id(d) = 1298277136616
로그인 후 복사

시퀀스의 증분 할당을 이해하려면 2013년 Python Brazil Conference에서 Leonardo Rochael이 언급한 퍼즐을 살펴보겠습니다.

t = (1, 2, [30, 40])
t[2] += [50, 60]
로그인 후 복사

A.  t는 (1, 2, [30, 40, 50, 60])

B입니다. 튜플은 해당 요소에 대한 할당을 지원하지 않으므로 TypeError 예외가 발생합니다.

C.

D. A, B 둘 다 맞습니다

저처럼 B를 선택하는 분들이 많을 것 같은데, 사실 정답은 D입니다. 콘솔에서 코드를 실행하면 결과는 다음과 같습니다.

요약:

1. 매번 새 시퀀스를 생성해야 하기 때문에 불변 시퀀스에 대한 반복적인 접합 작업은 매우 비효율적입니다. 원래 시퀀스를 생성해야 합니다. 시퀀스의 요소는 새 시퀀스에 복사된 다음 새 요소가 추가됩니다.

2. 변경 가능한 객체를 튜플에 넣지 마세요.

3. 증분 할당은 원자적 연산이 아닙니다. 예외가 발생하더라도 t 값은 여전히 ​​변경됩니다.

위 내용은 Python의 시퀀스 증분 할당에 대한 간략한 소개(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:cnblogs.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿