어차피 할당을 하는거니 한 줄로 안써도 되는거 아닌가? 하고 문제를 풀었지만 댕같이 실패.
값을 하나 하나 넣어봐야 확인이 가능했고 이를 chatgpt를 통해 확인해보았다.
코드에서 _curr, _next = _next, _curr + _next를 두 줄로 나누어 작성할 수 없는 이유는 **동시 할당 (simultaneous assignment)**의 특징 때문입니다. 이 특징이 어떻게 영향을 미치는지 설명하겠습니다.
동시 할당의 의미
파이썬에서 _curr, _next = _next, _curr + _next는 동시에 일어나는 연산입니다. 이는 두 변수에 대한 업데이트가 동시에 일어난다는 뜻입니다. 구체적으로는:
_curr은 기존 _next 값을 가져옵니다.
_next는 기존 _curr과 _next의 합을 계산하여 새 값을 할당합니다.
이 과정은 동시에 발생하기 때문에, _curr의 값이 업데이트되기 전에 _next의 계산이 이루어집니다.
순차 할당의 문제점
반면에, 이 코드를 두 줄로 나누어 작성하면 다음과 같이 됩니다:
python
코드 복사
_curr = _next _next = _curr + _next
이 경우 두 줄은 순차적으로 실행됩니다. 그러면 어떤 문제가 발생하는지 살펴봅시다.
첫 번째 줄:이 줄에서 _curr은 _next의 값을 가져옵니다. 이제 두 변수 모두 같은 값을 가지게 됩니다.
python
코드 복사
_curr = _next
두 번째 줄:이제 _curr과 _next가 동일한 값을 가지기 때문에, 이 줄의 결과는 단순히 _next를 두 배로 만드는 셈입니다. 즉, 이 줄의 결과는 피보나치 수열을 계산하는 것과 전혀 다른 결과를 낳게 됩니다.
python
코드 복사
_next = _curr + _next
예시로 확인
초기값으로 _curr = 0과 _next = 1을 사용한다고 가정해 보겠습니다.
올바른 코드 (동시 할당):
첫 번째 반복 후: _curr = 1, _next = 1
두 번째 반복 후: _curr = 1, _next = 2
python
코드 복사
_curr, _next = _next, _curr + _next
잘못된 코드 (순차 할당):
첫 번째 반복 후: _curr = 1, _next = 2 (두 배가 됨)
두 번째 반복 후: _curr = 2, _next = 4 (다시 두 배가 됨)
python
코드 복사
_curr = _next _next = _curr + _next
이 결과는 피보나치 수열이 아니라, 단순히 이전 값의 두 배를 계산하는 잘못된 수열을 만들어냅니다.
결론
결론적으로, _curr, _next = _next, _curr + _next를 두 줄로 나누어 작성할 수 없는 이유는 동시 할당의 특성 덕분에, 두 값이 서로 영향을 주지 않으면서 동시에 업데이트되기 때문입니다. 순차적으로 값을 할당하면 첫 번째 할당이 두 번째 할당에 영향을 미쳐 잘못된 결과를 낳게 됩니다.