Copie superficielle vs copie profonde en Python : comprendre les effets sur les dictionnaires
La copie superficielle d'un dictionnaire en Python, créée à l'aide de dict .copy() peut ne pas mettre à jour le dictionnaire d'origine comme prévu. Ce comportement découle du concept de copie superficielle ou profonde.
Qu'est-ce que la copie superficielle ?
Dans une copie superficielle, le contenu du dictionnaire est plutôt référencé. que copié par valeur. Cela signifie que les dictionnaires original et copié pointent vers les mêmes structures de données sous-jacentes.
Démonstration :
>> original = dict(a=1, b=2) >> new = original.copy() >> new.update({'c': 3}) >> original {'a': 1, 'b': 2}
Contrairement aux attentes, le dictionnaire original reste inchangé après la mise à jour de la copie superficielle. En effet, les références aux données sont partagées et non copiées.
Comment les listes diffèrent :
Contrairement aux dictionnaires, la copie superficielle des listes entraîne une référence partagée aux données. données. En effet, les listes contiennent des valeurs par référence.
>> original = [1, 2, 3] >> new = original >> new.append(4) >> new, original ([1, 2, 3, 4], [1, 2, 3, 4])
Dans ce cas, la liste originale et la nouvelle liste font référence aux mêmes données, donc les modifications apportées à l'une affectent l'autre.
Copie approfondie avec copy.deepcopy()
Pour créer une copie vraiment distincte d'un dictionnaire, y compris son contenu, copy.deepcopy() doit être utilisée. Cette fonction copie la structure et les valeurs par valeur, assurant un isolement complet.
import copy >> original = dict(a=1, b=2) >> new = copy.deepcopy(original) >> new.update({'c': 3}) >> original {'a': 1, 'b': 2} >> new {'a': 1, 'c': 3, 'b': 2}
Types d'opérations de copie :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!