En Python, le type de liste ne peut pas être une clé de dictionnaire.
key = [1, 2, 3]
table = {key: 1} #Erreur
La raison est que le type de liste peut changer son état. Par exemple
key1 = [1]
key2 = [2]
table = {key1: 1, key2: 2}
key1[0] = 2
Ce serait un problème si vous pouviez faire quelque chose comme ça. Mais je veux utiliser le tableau comme clé! Dans un tel cas, utilisez tuple.
Il existe des bibliothèques numpy et sympy qui gèrent leurs propres tableaux. Quel est le traitement dans ces derniers? Le fait qu'un objet puisse ou non être utilisé comme clé dépend de l'existence ou non d'une fonction `` hash```, alors jetons un coup d'œil.
from sympy import Matrix, ImmutableMatrix
import numpy as np
# sympy
Matrix([1, 2]).__hash__ # None
ImmutableMatrix([1, 2]).__hash__ # not None
# numpy
a = np.array([1, 2])
a.__hash__ # None
a.flags.writeable = False
a.__hash__ # None
Donc, c'était inutile même s'il n'était pas inscriptible avec numpy. Eh bien, c'est naturel car il peut être retourné. .. (Au fait, il semble que vous puissiez copier avec as_immutable de sympy etc. Même si vous apportez des modifications à l'original, le résultat ne changera pas.)
Recommended Posts