J'ai un programme Python qui travaille beaucoup avec des dictionnaires. Je dois faire des copies de dictionnaires des milliers de fois. J'ai besoin d'une copie à la fois des clés et du contenu associé. La copie sera éditée et ne doit pas être liée à l'original (par exemple, les modifications apportées à la copie ne doivent pas affecter l'original).
Les clés sont des chaînes de caractères, les valeurs sont des nombres entiers (0/1).
J'utilise actuellement une méthode simple :
newDict = oldDict.copy()
Le profilage de mon code montre que l'opération de copie prend le plus de temps.
Existe-t-il des alternatives plus rapides à la dict.copy()
méthode ? Quelle serait la plus rapide ?
1 votes
Si la valeur peut être soit 0 soit 1, est-ce qu'un
bool
est un meilleur choix qu'unint
?5 votes
Et si vous avez besoin de milliers d'exemplaires, les bitmasks fonctionneraient-ils encore mieux ?
0 votes
@Samir n'est pas
bool
en Python nomméint
de toute façon.0 votes
Je suis d'accord, cependant, qu'un bitmask pourrait être plus efficace pour vous (selon la façon dont vous utilisez ce "dict", vraiment).
0 votes
@Santa : Pas à ce que je sache. Des types complètement différents.
0 votes
@Samir @Santa @Wooble Merci pour les suggestions ! Je pense que je vais réécrire le code et essayer d'éviter l'utilisation des dicts entièrement (ou du moins à la plupart des endroits...) J'essaierai certainement de remplacer les ints par des bools et de regarder les bitmasks.
0 votes
@Samir Du point de vue de Python, bien sûr. Mais à ma connaissance, sous le capot, True == (int) 1 et False == (int) 0 en CPython. En d'autres termes, il s'agit toujours d'une valeur 32 bits.
1 votes
Pour clarifier, le
bool
est en fait une sous-classe (sous-type ?) du typeint
type.0 votes
@Santa : Oui, probablement. J'étais plus préoccupé par la sémantique et l'intention. Si vous voulez transmettre la vérité, utilisez un booléen.