>  기사  >  백엔드 개발  >  함수 인수에 새 목록을 할당해도 Python에서 원래 목록이 수정되지 않는 이유는 무엇입니까?

함수 인수에 새 목록을 할당해도 Python에서 원래 목록이 수정되지 않는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-01 11:42:02998검색

Why Does Assigning a New List to a Function Argument Not Modify the Original List in Python?

함수의 범위 내에서 목록 변경

Python에서 함수가 목록을 인수로 받으면 매개변수는 효과적으로 원래 목록의 위치를 ​​가리키는 참조가 됩니다. 기억 속에. 함수 내의 목록에 대한 모든 수정 사항은 호출 목록에 직접 반영됩니다.

그러나 다음 코드는 이러한 이해에 도전하는 독특한 동작을 보여줍니다.

<code class="python">def function1(list_arg):
   a = function2()  # function2 returns an array of numbers
   list_arg = list(a)

list1 = [0] * 5
function1(list1)
print(list1)
# [0, 0, 0, 0, 0]</code>

이 예에서는 우리는 function1이 list1의 요소를 배열 a의 요소로 대체하여 수정하도록 하려고 합니다. 그러나 결과는 list1이 변경되지 않은 상태로 유지된다는 것을 보여줍니다. 왜 이런 일이 발생합니까?

재할당 함정 공개

이 문제는 function1 내의 list_arg 변수에 새 값을 할당하면 원래 목록이 수정된다는 잘못된 가정에서 발생합니다. 실제로 이 할당은 메모리의 다른 개체를 가리키도록 list_arg의 참조만 변경합니다. 호출 코드에서 참조하는 원본 목록은 그대로 유지됩니다.

원하는 수정 달성

function1 내에서 원본 목록을 성공적으로 변경하려면 개별 요소를 수정해야 합니다. 이는 슬라이스 할당을 통해 수행할 수 있습니다.

<code class="python">list_arg[:] = list(a)</code>

슬라이스 할당은 list_arg의 전체 요소 범위를 list(a)의 값으로 대체합니다. 실제로 이 작업은 원래 목록을 직접 수정합니다.

주의 사항

슬라이스 할당은 편리한 솔루션을 제공하지만 혼동 가능성이 있다는 점에 유의하는 것이 중요합니다. 목록을 수정하면 코드의 투명성이 떨어지고 코드를 관리하는 다른 개발자가 오해할 가능성이 커집니다. 코드 명확성과 가독성을 높이기 위해 함수에서 수정된 새 목록을 반환하는 등의 대체 접근 방식을 고려해 보세요.

위 내용은 함수 인수에 새 목록을 할당해도 Python에서 원래 목록이 수정되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.