>  기사  >  백엔드 개발  >  Python에서 객체 간에 기본값이 공유되는 이유는 무엇입니까?

Python에서 객체 간에 기본값이 공유되는 이유는 무엇입니까?

王林
王林앞으로
2023-08-20 19:33:231082검색

Python에서 객체 간에 기본값이 공유되는 이유는 무엇입니까?

파이썬의 기본값 개념은 가변 또는 불변 객체 사용을 기반으로 합니다. 프로그래밍 실습에서는 변경 가능한 객체를 기본값으로 사용하지 않는 것이 가장 좋습니다. 대신 문제를 방지하려면 None을 기본값으로 사용하세요. 숫자, 문자열, 튜플 및 None과 같은 불변 객체는 변경되지 않습니다. 사전, 목록, 클래스 인스턴스와 같은 변경 가능한 객체의 경우 변경으로 인해 혼란이 발생할 수 있습니다.

함수에 포함된 사전의 예를 살펴보고 무엇이 잘못되었으며 어떻게 수정하는지 살펴보겠습니다.

질문

기능이 있습니다. 이 함수에서는 사전을 매개변수로 갖고 기본값을 설정합니다. 이 함수가 처음 호출되면 mydict에는 항목이 하나만 포함됩니다. 두 번째 호출에서 mydict에는 두 개의 항목이 포함됩니다. foo()가 실행을 시작했을 때 mydict에 이미 하나의 항목이 있었기 때문입니다.

으아악

우리는 종종 함수 호출이 기본값을 사용하여 새 개체를 생성할 것으로 기대합니다. 그러나 그렇지 않습니다. 기본값은 함수가 정의될 ​​때 한 번만 생성됩니다. 위의 사전 예제에서처럼 객체가 수정되면 함수에 대한 후속 호출은 수정된 객체를 참조합니다.

솔루션

변경 가능한 객체를 기본값으로 사용하는 문제를 해결하려면 다음과 같이 -

으아악

None과 같은 불변 객체를 사용하세요 -

으아악

계산 비용이 많이 드는 함수가 있는 경우 한 가지 기술은 함수를 호출할 때마다 인수와 결과 값을 캐시하고 동일한 값이 다시 요청될 때 캐시된 값을 반환하는 것입니다.

이것을 메모이제이션이라고 하며 이렇게 달성할 수 있습니다 -

으아악

다음은 결과를 캐시에 저장합니다 −

def foo(mydict={}):
   ... calculate...
   mydict[key] = value
   return mydict

위 내용은 Python에서 객체 간에 기본값이 공유되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제