Mire figyeljünk, ha egy szótárt dict.fromkeys() metódussal hozunk létre?

Pythonban dict típusú szótárt több módon is létrehozhatunk, amelyek közül egy lehetőség, ha a dict.fromkeys(iterobj, value) metódus hívásával tesszük ezt. Ez akkor hasznos, ha a szótár megalkotásával egyidőben a kulcsokhoz azonos kezdőértéket akarunk beállítani. A metódus első argumentuma egy olyan iterálható objektum, amelynek elemei a szótár kulcsai lesznek. A kulcsok mindegyikéhez egyetlen érték fog tartozni, amelyet a második argumentum szolgáltat. Lényeges tudni, hogy ez az érték közös lesz mindegyik kulcshoz. Másképpen fogalmazva, a kulcsok mindegyikéhez ugyanaz az objektum fog rendelődni. Ha ez nem tudatosul eléggé, akkor meglepő lehet a szótár viselkedése, ha a közös értékobjektum változtatható, mint például egy lista vagy egy halmaz.

Ugyanis, ha bármelyik kulccsal kikérjük ezt a közös objektumot, és változtatunk az értékén, akkor azt tapasztaljuk, hogy a változtatás minden kulcs-érték párra érvényes lesz. Ezt szemléltetik az alább látható kódsorok.

Ha ezt el akarjuk kerülni, akkor a dict.fromkeys() hívásakor második argumentumnak nem változtatható objektumot kell adni.

Amennyiben mégis olyan szótárt szeretnénk létrehozni, amelynél a kulcsokhoz egymástól független változtatható objektumok tartoznak, akkor a példányosítást más módon kell megvalósítani, legegyszerűbben egy szótárépítő kifejezéssel, amit szintén láthatunk fentebb.

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.