Python 2.6 및 3.2에서 변경 가능한 객체를 사용한 dict.fromkeys의 동작은 놀랄 수 있습니다. 목록이 값으로 사용되는 경우 사전의 한 항목을 수정하면 아래에 설명된 것처럼 다른 모든 항목에 영향을 미칩니다.
>>> xs = dict.fromkeys(range(2), []) >>> xs {0: [], 1: []} >>> xs[0].append(1) >>> xs {0: [1], 1: [1]}
그러나 Python 3.2의 dict 이해에서는 이 동작이 발생하지 않습니다.
>>> xs = {i:[] for i in range(2)} >>> xs {0: [], 1: []} >>> xs[0].append(1) >>> xs {0: [1], 1: []}
fromkeys의 동작에 대한 명백한 이유는 결과 사전의 각 항목이 동일한 객체를 참조하기 때문입니다. 하나의 항목을 통해 객체를 수정하면 다른 모든 항목에 영향을 미칩니다. 사전을 수동으로 생성하면 이를 명확히 할 수 있습니다.
>>> a = [] >>> xs = dict.fromkeys(range(2), a)
이는 사전 항목이 모두 동일한 객체를 참조한다는 것을 보여줍니다.
>>> xs[0] is a and xs[1] is a True
이 동작을 방지하려면 dict comprehension을 사용하거나, Python 2.6 이하를 사용하는 경우 생성기 표현식과 함께 dict를 사용하세요.
xs = dict((i, []) for i in range(2))
위 내용은 변경 가능한 값이 있는 Python\의 `dict.fromkeys`로 인해 예기치 않은 동작이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!