fromkeys를 사용한 변경 가능한 개체 및 사전 생성
목록과 같은 변경 가능한 개체가 포함된 사전을 생성하기 위해 dict.fromkeys를 사용할 때 관찰된 동작은 처음에는 놀랄 수 있습니다. 다음 예에서는 문제를 보여줍니다.
<code class="python">xs = dict.fromkeys(range(2), []) xs[0].append(1) print(xs) # Outputs: {0: [1], 1: [1]}</code>
이 경우 두 개의 키(0과 1)와 각 값에 대한 빈 목록이 있는 사전을 만듭니다. 그러나 키 0과 연결된 목록에 요소를 추가하면 키 1과 연결된 목록에도 나타납니다.
이 동작을 이해하려면 dict.fromkeys가 동일한 값 개체를 공유한다는 점에 유의하는 것이 중요합니다. 모든 키 사이. 이 예에서 xs[0]과 xs[1]은 모두 아래와 같이 동일한 목록 개체를 가리킵니다.
<code class="python">print(xs[0] is xs[1]) # Outputs: True</code>
따라서 xs[0]을 통해 목록에 적용된 모든 수정 사항도 반영됩니다. xs[1]에서 동일한 기본 개체를 참조하기 때문입니다.
반대로 사전 이해를 사용하여 변경 가능한 개체가 포함된 사전을 생성하면 각 값이 별도의 개체가 됩니다.
<code class="python">xs = {i: [] for i in range(2)} xs[0].append(1) print(xs) # Outputs: {0: [1], 1: []}</code>
이 경우 xs[0]과 xs[1]은 동일한 객체가 아니므로 xs[0]을 수정해도 xs[1]에 영향을 주지 않습니다.
Python 2.6 이하에서는 사전 이해가 사용할 수 없는 경우 dict()와 함께 생성기 표현식을 사용하여 사전 이해와 동일한 동작을 달성할 수 있습니다.
<code class="python">xs = dict((i, []) for i in range(2))</code>
위 내용은 변경 가능한 값을 가진 `dict.fromkeys`가 공유 객체를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!