>  기사  >  백엔드 개발  >  다음은 \"미스터리\" 및 \"예기치 못한 행동\" 측면을 다루는 몇 가지 타이틀 옵션입니다. * `dict.fromkeys`가 가변 객체에 대해 이상하게 작동하는 이유는 무엇입니까? * `d의 미스터리

다음은 \"미스터리\" 및 \"예기치 못한 행동\" 측면을 다루는 몇 가지 타이틀 옵션입니다. * `dict.fromkeys`가 가변 객체에 대해 이상하게 작동하는 이유는 무엇입니까? * `d의 미스터리

DDD
DDD원래의
2024-10-26 14:52:03924검색

Here are a few title options, playing on the

dict.fromkeys 및 변경 가능한 객체의 미스터리 공개

Python의 dict.fromkeys 함수는 변경 가능한 객체와 함께 사용할 때 예기치 않게 동작할 수 있습니다. 다음 예에서 볼 수 있듯이:

<code class="python">xs = dict.fromkeys(range(2), [])
xs[0].append(1)
# xs now contains {0: [1], 1: [1]} instead of {0: [1], 1: []}</code>

수수께끼 동작

이 동작은 각 키에 대해 고유한 값을 유지하는 사전 이해의 동작과 모순되는 것처럼 보입니다.

<code class="python">xs = {i: [] for i in range(2)}
xs[0].append(1)
# xs still contains {0: [1], 1: []}</code>

불일치 이해

가장 큰 차이점은 이 두 가지 방법이 사전을 생성하는 방식에 있습니다. Python 2.6(및 이전 버전)에서 dict.fromkeys는 모든 키에 대해 동일한 변경 가능 개체를 참조하는 반면 사전 이해는 각 키에 대해 고유한 개체를 생성합니다.

결과는 xs[0]이 첫 번째에서 변경될 때입니다. 예를 들어 xs[1]이 동일한 목록 개체를 참조하기 때문에 변경 사항이 xs[1]에 반영됩니다. 대조적으로, 두 번째 예에서는 목록이 구별되므로 xs[0]을 변경해도 xs[1]에 영향을 미치지 않습니다.

놀라움을 피하기

이러한 예상치 못한 동작을 방지하려면 가능하면 사전 이해를 사용하는 것이 좋습니다. 사전 이해 기능을 사용할 수 없는 경우(예: Python 2.6) dict 함수가 포함된 생성기 표현식을 사용하여 고유한 객체를 생성하는 것이 대안입니다.

<code class="python">xs = dict((i, []) for i in range(2))</code>

위 내용은 다음은 \"미스터리\" 및 \"예기치 못한 행동\" 측면을 다루는 몇 가지 타이틀 옵션입니다. * `dict.fromkeys`가 가변 객체에 대해 이상하게 작동하는 이유는 무엇입니까? * `d의 미스터리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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